Objetivo:
Programar un botón para controlar el led de la cámara y poder utilizarlo como linterna.
Logística adicional necesaria:
Para poder probarlo necesitaremos un móvil con led en la cámara, ya que el emulador no muestra información al respecto.
Con este código podremos realizar el apagado y encendido del flash del móvil. Hay que tener en cuenta que el flash consume mucha batería, por lo que se recomienda no realizar un uso continuado del mismo.
Un ejemplo de aplicación creada a partir del código fuente siguiente, sería “Quick Light and Strobe”, donde se muestra una linterna, con posibilidad de cambios de color e incluso funcionar como estroboscopio.
Dejo un enlace de la misma de la misma en la seccion Aplicaciones Recomendadas
Código fuente java (principal.java):
[sourcecode language=”java”]
package com.ejemplo.linternaled;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class principal extends Activity {
Camera camera = null;
Parameters parameters;
Button FlashLightControl;
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Creamos un boton con el texto adecuado
FlashLightControl = (Button)findViewById(R.id.flashcontrol);
FlashLightControl.setText("ENCENDER LED CAMARA");
}
/**
* Control LED Camera.
* Esta funcion se ejecuta al clickar el boton que hemos incluido
* @param arg0
*/
public void onClickLED(View arg0) {
try{
// Al pulsar, si el Led estaba encendido se apaga y viceversa
if(camera == null){
camera = Camera.open();
parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
FlashLightControl.setText("APAGANDO LED CAMARA");
}else{
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
FlashLightControl.setText("ENCENDIENDO LED CAMARA");
}
}catch(Exception e){
//Control errores
}
}
/**
* Si al salir está el LED encendido, lo apagamos.
* Esta funcion es llamada cuando se cierra una aplicación.
*/
public void finish(){
if (camera != null){
parameters.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
camera.release();
camera = null;
}
super.finish();
}
}
[/sourcecode]
Código fuente XML (main.xml):
[sourcecode language=”xml”]
<!–?xml version="1.0" encoding="utf-8"?–>
<!– Titulo de nuestra aplicacion –>
<!– Boton para encender o apagar el led de la camara –>
<button>
[/sourcecode]
Añadir el permiso necesario al AndroidManifest.xml :
[sourcecode language=”xml”]
<!– NECESARIO PARA EL LED FLASH –>
[/sourcecode]
Hola Gonzalo , una pregunta esta inplementacion esta probada con el Nexus S con ICS 4.0.3 ??
Gracias!!
Buenas Manu!,
pues lo cierto es que no, lo siento.
Si llegaste a probarlo avísanos con tu veredicto, si es posible.
Gracias a ti y un saludo!
muy buen tuto gracias me sirvio bastante :D
Te hago una consulta, sirve para Android 2.1? porque lo estoy probando en un Motorola Defy, y no me funciona.
Muchas gracias
Buenas Andres,
gracias por la info. Hay algunos móviles no compatibles con ello. Por lo visto el tuyo será uno de ellos. La versión en principio no es el problema, ya que algunos sí que funcionan con 2.1
Un saludo!
Buenas Andrés!,
lo cierto es que este código en concreto es más dependiente del dispositivo en sí, ya que se ha probado en móviles con misma versión Android, pero en algunos no llegó a funcionar.
Si puedo recopilaré una lista y la dejo en el post.
Un saludo!
Podrias dejar en descarga el proyecto?
hay un problema si se ejecuta la app cuando la linterna está ya encendida (o si cambiamos la orientación del movil cuando la linterna está encendida y la app funcionando), en ambos casos no se puede apagar