Cómo encender la linterna Android
Actualizar
Echa un vistazo a mi respuesta
- Nexus 5 (4.4.2) El LED de la linterna no se enciende
- Control de linterna en Marshmallow
- Cómo encender la linterna y la cámara frontal al mismo tiempo en android
- Manteniendo la cámara en pausa
- ¿Cómo puedo liberar la cámara cuando otra aplicación lo solicite?
Original
Estoy tratando de encender la linterna de la cámara en la Revolución LG dentro de mi programa. Utilizo el método del modo de la antorcha que trabaja en la mayoría de los teléfonos pero no en el teléfono de LG. ¿Alguien sabe cómo conseguir que funcione en LG o específicamente la Revolución?
Aquí está mi manifiesto:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-permission android:name="android.permission.FLASHLIGHT"/>
Aquí está mi código actual:
public Camera camera = Camera.open(); public Camera.Parameters Flash = camera.getParameters();
Con mi en crear:
Flash.setFlashMode("torch"); Parameters p = camera.getParameters(); camera.setParameters(Flash); camera.startPreview();
He visto gente usar un enfoque automático pero no sé si eso funcionaría.
- ¿Puedo controlar la linterna sin usar android.hardware.Camera?
- Activar / desactivar la linterna con SurfaceView
- ¿Dónde está el código fuente para cambiar la linterna en Android 5.1
- Utilizar linterna de cámara en Android
- Controles de intensidad FlashLED
- Apertura de linterna en android con diferentes modos
- Linterna LED en Galaxy Nexus controlable por qué API?
- ¿Hay alguna manera de liberar una cámara de diferentes actividades después de adquirirlo de una actividad diferente.?
Pensé que iba a actualizar esto con algunos bullet prof código que funciona en casi todos los dispositivos 4.0 +.
public void turnOn() { camera = Camera.open(); try { Parameters parameters = camera.getParameters(); parameters.setFlashMode(getFlashOnParameter()); camera.setParameters(parameters); camera.setPreviewTexture(new SurfaceTexture(0)); camera.startPreview(); camera.autoFocus(this); } catch (Exception e) { // We are expecting this to happen on devices that don't support autofocus. } } private String getFlashOnParameter() { List<String> flashModes = camera.getParameters().getSupportedFlashModes(); if (flashModes.contains(FLASH_MODE_TORCH)) { return FLASH_MODE_TORCH; } else if (flashModes.contains(FLASH_MODE_ON)) { return FLASH_MODE_ON; } else if (flashModes.contains(FLASH_MODE_AUTO)) { return FLASH_MODE_AUTO; } throw new RuntimeException(); }
La verdadera clave es establecer que SurfaceTexture falso para que la vista previa realmente se inicie. Apagarlo también es muy fácil
public void turnOff() { try { camera.stopPreview(); camera.release(); camera = null; } catch (Exception e) { // This will happen if the camera fails to turn on. } }
Parece que el desarrollador de la aplicación Tiny Flashlight + LED en el Android Market descubrió cómo hacer que la linterna funcione en LG Revolution.
Tal vez usted puede ponerse en contacto con él y preguntar? También puede comprobar los permisos que está utilizando en su aplicación para tratar de hacer que su aplicación funcione.
¡Buena suerte!
Pruebe esto:
if(camera == null){ camera = Camera.open(); parameters = camera.getParameters(); List<String> flashModes = parameters.getSupportedFlashModes(); if(flashModes != null && flashModes.contains(Parameters.FLASH_MODE_TORCH)){ //appareil supportant le mode torch parameters.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(parameters); } else if (flashModes != null && flashModes.contains(Parameters.FLASH_MODE_ON)){ //spécial samsung parameters.setFlashMode(Parameters.FLASH_MODE_ON); camera.setParameters(parameters); camera.startPreview(); camera.autoFocus(new AutoFocusCallback() { public void onAutoFocus(boolean success, Camera camera) { } }); } else { parameters.setFlashMode(Parameters.FLASH_MODE_OFF); camera.setParameters(parameters); } parameters.setFlashMode( Parameters.FLASH_MODE_OFF ); camera.setParameters(parameters); camera.release(); camera = null; } catch (RuntimeException e) {} }//if
Esto funcionó bien para LG Nexus:
camera = Camera.open(); camera.setPreviewTexture(new SurfaceTexture(0)); camera.setParameters(p); camera.startPreview();
/*TESTED LG G4 */ public void flashOnOff(){ List<String> flashModes = parameter001.getSupportedFlashModes(); if(flashModes != null && flashModes.contains(Parameters.FLASH_MODE_TORCH)){ //appareil supportant le mode torch parameter001.setFlashMode(Parameters.FLASH_MODE_TORCH); mCamera.setParameters(parameter001); } else if (flashModes != null && flashModes.contains(Parameters.FLASH_MODE_ON)){ //spécial samsung parameter001.setFlashMode(Parameters.FLASH_MODE_ON); mCamera.setParameters(parameter001); mCamera.autoFocus(new AutoFocusCallback() { public void onAutoFocus(boolean success, Camera camera) { } }); } else { parameter001.setFlashMode(Parameters.FLASH_MODE_OFF); mCamera.setParameters(parameter001); } if (!isFlashOn) { if (mCamera == null || parameter001 == null) { return; } parameter001 = mCamera.getParameters(); parameter001.setFlashMode(Parameters.FLASH_MODE_TORCH); mCamera.setParameters(parameter001); try { mCamera.setPreviewTexture(new SurfaceTexture(0)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mCamera.startPreview(); isFlashOn = true; // changing button/switch image }else if (isFlashOn) { if (mCamera == null || parameter001 == null) { return; } parameter001 = mCamera.getParameters(); parameter001.setFlashMode(Parameters.FLASH_MODE_OFF); mCamera.setParameters(parameter001); mCamera.stopPreview(); isFlashOn = false; } }