Xamarin.Essentials: Linterna

La clase Flashlight tiene la capacidad de activar o desactivar el flash de la cámara del dispositivo y convertirlo en una linterna.

Primeros pasos

Para empezar a usar esta API, lea la guía de introducción para Xamarin.Essentials con el fin de asegurarse de que la biblioteca está correctamente instalada y configurada en los proyectos.

Para acceder a la funcionalidad de Flashlight, se requiere la siguiente configuración específica para la plataforma.

Los permisos Flashlight y Camera son obligatorios y se deben configurar en el proyecto de Android. Se puede agregar de las siguientes maneras:

Abra el archivo AssemblyInfo.cs de la carpeta Propiedades y agregue lo siguiente:

[assembly: UsesPermission(Android.Manifest.Permission.Flashlight)]
[assembly: UsesPermission(Android.Manifest.Permission.Camera)]

O BIEN, actualice el manifiesto de Android:

Abra el archivo AndroidManifest.xml de la carpeta Propiedades y agregue lo siguiente dentro del nodo manifest.

<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.CAMERA" />

O haga clic con el botón derecho en el proyecto de Android y abra las propiedades del proyecto. En Manifiesto de Android, busque el área Permisos necesarios: y active los permisos FLASHLIGHT (Linterna) y CAMERA (Cámara). Esto actualizará automáticamente el archivo AndroidManifest.xml.

Mediante la adición de estos permisos Google Play filtrará automáticamente los dispositivos sin necesidad de hardware específico. Para solucionarlo, agregue lo siguiente al archivo AssemblyInfo.cs del proyecto de Android:

[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

Esta API usa permisos en tiempo de ejecución en Android. Asegúrese de que Xamarin.Essentials se haya inicializado por completo y de que el control de permisos esté configurado en la aplicación.

En el elemento MainLauncher del proyecto de Android o cualquier Activity que se inicie, Xamarin.Essentials se debe inicializar en el método OnCreate:

protected override void OnCreate(Bundle savedInstanceState) 
{
    //...
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState); // add this line to your code, it may also be called: bundle
    //...
}    

Para controlar los permisos en tiempo de ejecución de Android, Xamarin.Essentials debe recibir cualquier OnRequestPermissionsResult. Agregue el código siguiente a todas las clases Activity:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
{
    Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

Uso de Flashlight

Agregue una referencia a Xamarin.Essentials en la clase:

using Xamarin.Essentials;

La linterna se puede activar y desactivar a través de los métodos TurnOnAsync y TurnOffAsync:

try
{
    // Turn On
    await Flashlight.TurnOnAsync();

    // Turn Off
    await Flashlight.TurnOffAsync();
}
catch (FeatureNotSupportedException fnsEx)
{
    // Handle not supported on device exception
}
catch (PermissionException pEx)
{
    // Handle permission exception
}
catch (Exception ex)
{
    // Unable to turn on/off flashlight
}

Detalles de implementación de la plataforma

La clase Flashlight se ha optimizado en función del sistema operativo del dispositivo.

Nivel de API 23 y superior

En los niveles de API más recientes, se usa el Modo Linterna para activar o desactivar la unidad de flash del dispositivo.

Nivel de API 22 e inferior

Se crea una textura de la superficie de cámara para activar o desactivar el FlashMode de la unidad de la cámara.

API

Encuentre más vídeos de Xamarin en Channel 9 y YouTube.