Todos los principiantes que están en el mundo del desarrollo de Android deben crear una aplicación de Android simple que pueda encender/apagar la linterna o la luz de las antorchas haciendo clic en un botón. Entonces, al final de este artículo, uno podrá crear su propia aplicación de linterna para Android con un diseño simple. whatimplementamos este proyecto utilizando el lenguaje Java .
Pasos para construir una aplicación de Android de linterna simple/torchlight
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: Trabajando con activity_main.xml
- Este diseño contiene un TextView simple , View (como divisor) y un ToggleButton para alternar la unidad Flashlight.
- Consulte Cómo agregar el botón de alternar en una aplicación de Android para implementar y ver cómo funciona el botón de alternar.
- Invoque el siguiente código en el archivo activity_main.xml o puede diseñar widgets personalizados.
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" tools:ignore="HardcodedText"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="100dp" android:text="Flashlight" android:textColor="@color/colorPrimary" android:textSize="50sp" android:textStyle="bold|italic" /> <!--This is the simple divider between above TextView and ToggleButton--> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginStart="32dp" android:layout_marginTop="16dp" android:layout_marginEnd="32dp" android:background="@android:color/darker_gray" /> <!--This toggle button by default toggles between the ON and OFF we no need to set separate TextView for it--> <ToggleButton android:id="@+id/toggle_flashlight" android:layout_width="200dp" android:layout_height="75dp" android:layout_gravity="center" android:layout_marginTop="32dp" android:onClick="toggleFlashLight" android:textSize="25sp" /> </LinearLayout>
Se produce la siguiente interfaz de usuario de salida:
Paso 3: Manejo del widget Botón de alternar para activar o desactivar dentro del archivo MainActivity.java
El código completo para el archivo MainActivity.java se proporciona a continuación. Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.content.Context; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraManager; import android.os.Build; import android.os.Bundle; import android.view.View; import android.widget.Toast; import android.widget.ToggleButton; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private ToggleButton toggleFlashLightOnOff; private CameraManager cameraManager; private String getCameraID; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Register the ToggleButton with specific ID toggleFlashLightOnOff = findViewById(R.id.toggle_flashlight); // cameraManager to interact with camera devices cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); // Exception is handled, because to check whether // the camera resource is being used by another // service or not. try { // O means back camera unit, // 1 means front camera unit getCameraID = cameraManager.getCameraIdList()[0]; } catch (CameraAccessException e) { e.printStackTrace(); } } // RequiresApi is set because, the devices which are // below API level 10 don't have the flash unit with // camera. @RequiresApi(api = Build.VERSION_CODES.M) public void toggleFlashLight(View view) { if (toggleFlashLightOnOff.isChecked()) { // Exception is handled, because to check // whether the camera resource is being used by // another service or not. try { // true sets the torch in ON mode cameraManager.setTorchMode(getCameraID, true); // Inform the user about the flashlight // status using Toast message Toast.makeText(MainActivity.this, "Flashlight is turned ON", Toast.LENGTH_SHORT).show(); } catch (CameraAccessException e) { // prints stack trace on standard error // output error stream e.printStackTrace(); } } else { // Exception is handled, because to check // whether the camera resource is being used by // another service or not. try { // true sets the torch in OFF mode cameraManager.setTorchMode(getCameraID, false); // Inform the user about the flashlight // status using Toast message Toast.makeText(MainActivity.this, "Flashlight is turned OFF", Toast.LENGTH_SHORT).show(); } catch (CameraAccessException e) { // prints stack trace on standard error // output error stream e.printStackTrace(); } } } // when you click on button and torch open and // you do not close the tourch again this code // will off the tourch automatically @RequiresApi(api = Build.VERSION_CODES.M) @Override public void finish() { super.finish(); try { // true sets the torch in OFF mode cameraManager.setTorchMode(getCameraID, false); // Inform the user about the flashlight // status using Toast message Toast.makeText(SlaphScreen.this, "Flashlight is turned OFF", Toast.LENGTH_SHORT).show(); } catch (CameraAccessException e) { // prints stack trace on standard error // output error stream e.printStackTrace(); } } }
- Lea acerca de la función printStackTrace() aquí: Método throwable printStackTrace() en Java con ejemplos .
- Después de manejar el ToggleButton, es necesario probar la aplicación en un dispositivo Android físico . Porque si ejecuta la aplicación en el emulador que viene con Android Studio, la aplicación se bloqueará tan pronto como se haga clic en ToggleButton, porque el dispositivo emulador no vendría con la unidad de flash de la cámara.
- Este método de acceder al hardware de la cámara no requiere un permiso especial del usuario para acceder a la unidad de la cámara. Porque en esto estamos accediendo a la unidad de flash solo a través de la identificación de la cámara (ya sea una cámara frontal o una cámara trasera).
Producción:
Publicación traducida automáticamente
Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA