En este momento estás viendo Cómo Crear App De Linterna En Android Studio

Cómo Crear App De Linterna En Android Studio

Una de las aplicaciones más simples que puedes crear cuando estás iniciando en el mundo del desarrollo Android, es una app que pueda encender o apagar la linterna haciendo click en un botón.

Al final de este tutorial, podrás crear tu propia aplicación de linterna para Android con un diseño simple y sencillo.

Ten en cuenta que vamos a implementar este proyecto utilizando el lenguaje Java.

Primero nos dirigimos al archivo strings.xml, añadimos el titulo y estados.

<resources>
    <string name="app_name">Linterna</string>
    <string name="titulo">Linterna</string>
    <string name="estado_1">Apagado</string>
    <string name="estado_2">Prendido</string>
</resources>

Ahora nos vamos al archivo colors.xml y añadimos dos colores.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="colorPrimary">#FF9800</color>
    <color name="colorTeban">#FF420042</color>
</resources>

Una vez editado, pasamos al archivo themes.xml y hacemos referencia a los colores que agregamos, procedemos de la misma manera para la versión night.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.Curso1Linterna" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>

        <item name="colorOnSecondary">@color/colorTeban</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorOnSecondary</item>
    </style>
</resources>

Ahora nos dirigimos al archivo activity_main.xml.

Añadimos el atributo background y colocamos nuestro fondo personalizado, posteriormeente añadimos un textview para mostrar el titulo de nuestra app.

Luego añadimos un view que servirá como separador, posteriormente añadimos un botón de dos estados para controlar la linterna

<?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:background="@drawable/ab_gradient"
    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="@string/titulo"
        android:textColor="@color/colorPrimary"
        android:textSize="50sp"
        android:textStyle="bold|italic" />

    <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" />

    <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:textOff="@string/estado_1"
        android:textOn="@string/estado_2"
        android:textSize="25sp" />

</LinearLayout>

Ahora nos dirigimos al archivo MainActivity.java en el cual colocaremos las acciones que tendrá nuestra app.

Comenzamos añadiendo los atributos para controlar la app, dentro del método oncreate, hacemos referencia al botón de dos estados

Posteriormente obtenemos los servicios de cámara del sistema operativo, colocamos el bloque try, catch en caso que ocurra algo inesperado al buscar la cámara

Creamos un nuevo método para controlar la linterna del dispositivo, tendremos dos opciones, en el primero se activará la linterna y en el otro caso estará apagada.

Finalmente añadiremos un método para apagar la linterna cuando decidamos cerrar la app

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

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;

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);
        toggleFlashLightOnOff = findViewById(R.id.toggle_flashlight);
        cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
        try {
            getCameraID = cameraManager.getCameraIdList()[0];
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    public void toggleFlashLight(View view) {
        if (toggleFlashLightOnOff.isChecked()) {
            try {
                cameraManager.setTorchMode(getCameraID, true);
                Toast.makeText(MainActivity.this, "Linterna está prendida", Toast.LENGTH_SHORT).show();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        } else {
            try {
                cameraManager.setTorchMode(getCameraID, false);
                Toast.makeText(MainActivity.this, "Linterna está apagada", Toast.LENGTH_SHORT).show();
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    public void finish() {
        super.finish();
        try {
            cameraManager.setTorchMode(getCameraID, false);
            Toast.makeText(MainActivity .this, "Linterna está apagada", Toast.LENGTH_SHORT).show();
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
}

A continuación, te dejo un video con la implementación de la App de Linterna.

Deja una respuesta