Quiero encender la luz del flash frontal (no con la vista previa de la cámara) mediante programación en Android. Busqué en Google pero la ayuda que encontré me remitió a esta página
¿Alguien tiene algún enlace o código de muestra?
fuente
Quiero encender la luz del flash frontal (no con la vista previa de la cámara) mediante programación en Android. Busqué en Google pero la ayuda que encontré me remitió a esta página
¿Alguien tiene algún enlace o código de muestra?
Para este problema debes:
¿Verifica si la linterna está disponible o no?
Si es así, apague / encienda
Si no es así, puede hacer lo que sea, según las necesidades de su aplicación.
Para verificar la disponibilidad de flash en el dispositivo:
Puedes usar lo siguiente:
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
que devolverá verdadero si hay un flash disponible, falso si no.
Consulte:
http://developer.android.com/reference/android/content/pm/PackageManager.html para obtener más información.
Para encender / apagar la linterna:
Busqué en Google y obtuve esto sobre android.permission.FLASHLIGHT. El permiso de los manifiestos de Android parece prometedor:
<!-- Allows access to the flashlight -->
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal"
android:label="@string/permlab_flashlight"
android:description="@string/permdesc_flashlight" />
Luego use la Cámara y configure Camera.Parameters . El parámetro principal utilizado aquí es FLASH_MODE_TORCH .
p.ej.
Fragmento de código para encender la linterna de la cámara.
Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
Fragmento de código para apagar la luz LED de la cámara.
cam.stopPreview();
cam.release();
Acabo de encontrar un proyecto que utiliza este permiso. Verifique el código src de la configuración rápida. aquí http://code.google.com/p/quick-settings/ (Nota: este enlace ahora está roto)
Para Flashlight, busque directamente http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (Nota: este enlace es ahora roto)
Actualización6 También podría intentar agregar un SurfaceView como se describe en esta respuesta Linterna LED en Galaxy Nexus controlable por qué API? Esta parece ser una solución que funciona en muchos teléfonos.
Actualización 5 Actualización importante
He encontrado un enlace alternativo (para los enlaces rotos anteriores): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm Ahora puede usar esto enlace. [Actualización: 14/9/2012 Este enlace ahora está roto]
Actualización 1
Otro código de código abierto: http://code.google.com/p/torch/source/browse/
Actualización 2
Ejemplo que muestra cómo habilitar el LED en un Motorola Droid: http://code.google.com/p/droidled/
Otro código fuente abierto:
http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/
Actualización 3 (widget para encender / apagar la cámara led)
Si desea desarrollar un widget que encienda / apague el led de su cámara, debe consultar mi widget de respuesta para encender / apagar la linterna de la cámara en Android .
Actualización 4
Si desea establecer la intensidad de la luz que emerge del LED de la cámara, puede consultar ¿Puedo cambiar la intensidad del LED de un dispositivo Android?Publicación completa. Tenga en cuenta que solo los dispositivos HTC rooteados son compatibles con esta función.
** Cuestiones:**
También hay algunos problemas al encender / apagar la linterna. p.ej. para los dispositivos que no tienen FLASH_MODE_TORCH
o incluso si tienen, entonces la linterna no enciende, etc.
Por lo general, Samsung crea muchos problemas.
Puede consultar los problemas en la siguiente lista:
Use la linterna de la cámara en Android
Encienda / apague la cámara LED / luz de flash en Samsung Galaxy Ace 2.2.1 y Galaxy Tab
Según mi experiencia, si su aplicación está diseñada para funcionar tanto en orientación vertical como horizontal, debe declarar la variable
cam
como estática. De lo contrario, loonDestroy()
que se llama al cambiar de orientación, lo destruye pero no libera la cámara, por lo que no es posible volver a abrirla.para manifestar tuve que poner esta línea
de http://developer.android.com/reference/android/hardware/Camera.html
Las líneas sugeridas arriba no funcionaban para mí.
fuente
you need to declare the variable cam as static
Camera
Clase enAndroidStudio
prestar atención para serandroid.hardware
clase ...En API 23 o superior (Android M, 6.0)
EDICION ADICIONAL
La gente todavía votaba mi respuesta, así que decidí publicar código adicional. Esta fue mi solución para el problema en el pasado:
fuente
Obtuve la luz AutoFlash con los siguientes tres pasos simples.
En su Código de cámara, haga lo siguiente.
Construir + Ejecutar -> Ahora Vaya al área de luz tenue y Capture foto, debería obtener luz de flash automático si el dispositivo lo admite.
fuente
Android Lollipop introdujo la API de camera2 y desaprobó la API de cámara anterior. Sin embargo, usar la API en desuso para encender el flash aún funciona y es mucho más simple que usar la nueva API.
Parece que la nueva API está diseñada para su uso en aplicaciones dedicadas de cámara con todas las funciones y que sus arquitectos realmente no consideraron casos de uso más simples, como encender la linterna. Para hacer eso ahora, uno debe obtener un CameraManager, crear una CaptureSession con una Surface ficticia y finalmente crear e iniciar una CaptureRequest. ¡Manejo de excepciones, limpieza de recursos y devoluciones de llamadas largas incluidas!
Para ver cómo encender la linterna en Lollipop y más reciente, eche un vistazo a FlashlightController en el proyecto AOSP (intente encontrar las API más nuevas y antiguas que se han modificado). No olvide establecer los permisos necesarios.
Android Marshmallow finalmente introdujo una forma simple de encender el flash con setTorchMode .
fuente
Código completo para la aplicación Android Flashlight
Manifiesto
XML
MainActivity.java
fuente
Hay diferentes formas de acceder a Camera Flash en diferentes versiones de Android. Pocas API dejaron de funcionar en Lollipop y luego se cambió nuevamente en Marshmallow. Para superar esto, he creado una biblioteca simple que he estado usando en algunos de mis proyectos y está dando buenos resultados. Todavía está incompleto, pero puede intentar verificar el código y encontrar las piezas que faltan. Aquí está el enlace: NoobCameraFlash .
Si solo desea integrarse en su código, puede usar gradle para eso. Aquí están las instrucciones (tomadas directamente del archivo Léame):
Paso 1. Agregue el repositorio JitPack a su archivo de compilación. Agréguelo en su raíz build.gradle al final de los repositorios:
Paso 2. Agregar la dependencia
Uso
Inicializa el
NoobCameraManager
singleton.Opcionalmente, puede establecer el Nivel de registro para el registro de depuración. El registro utiliza la biblioteca LumberJack . El nivel de registro predeterminado es
LogLevel.None
Después de eso, solo necesita llamar al singleton para encender o apagar el flash de la cámara.
También es fácil alternar Flash
fuente
You have to take care of the runtime permissions to access Camera yourself, before initializing the NoobCameraManager. In version 0.1.2 or earlier we used to provide support for permissions directly from the library, but due to dependency on the Activity object, we have to remove it.
He implementado esta función en mi aplicación a través de fragmentos usando SurfaceView. Puede encontrar el enlace a esta pregunta de stackoverflow y su respuesta aquí
Espero que esto ayude :)
fuente
En Marshmallow y versiones posteriores, `setTorchMode () 'de CameraManager parece ser la respuesta. Esto funciona para mi:
fuente
Prueba esto.
fuente
También puede usar el siguiente código para apagar el flash.
fuente