Widget Android - Linterna paso a paso (parte1)
Muy buenas a todos otra vez! en esta lección veremos paso a paso como hacer un Widget para controlar el LED de la cámara y así convertir nuestro móvil en una linterna!. Se que no es gran cosa, pero veras como recoger eventos de tipo click en nuestro widget y ejecutar lo que queremos. ¡¡comencemos!!
La verdad, es que a mi me resulta muy útil este widget, yo lo uso a diario, soy de los que se visten nada mas salir de la cama y antes de caer al suelo, y claro, ni se me ocurre encender la luz para vestirme, si por algún casual, se me va la pinza y la enciendo, mi mujer se encarga de recordarme que ella sigue durmiendo!! ;P. Para vestirme uso la "linterna pantalla", que da menos luz y ambienta la habitación, se ve lo justo para vestirme, si por ejemplo bajo al garaje y se va la luz antes de llegar al coche uso el LED ;P
Paso1. Crea un nuevo proyecto Android
Como ya adelante en la lección
anterior, esta aplicación constara de dos clases:
1. Una clase de tipo Activity que iniciara una Actividad que mostrara
una pantalla blanca (FondoBlanco.java) y así hacer la "Linterna
Pantalla" para los móviles que no tienen Flash o quieran
obtener una luz mas suave. Esta Activity, también modificara el
brillo de la pantalla para dar el máximo brillo, ya que con la
luz apagada, nuestra pantalla se ajusta al mínimo brillo para
ahorrar batería, y esta no daría la luz suficiente que necesitamos.
2. Una clase de tipo AppWidgetProvider (MiWidget_2x1.java) que
gestionara el widget en si y que contendrá y gestionara las acciones
para los 2 botones (Pantalla y LED). El LED lo iniciaremos desde
esta misma clase, y lo que hará el botón pantalla, será iniciar
la Activity que muestra el fondo blanco.
Creamos proyecto nuevo Android
Esto es fácil, le damos en el menú Archivo (File) -> Nuevo (New) -> Proyecto Android (Android Aplicación Project) y seguimos el asistente.
Para conseguir la máxima compatibilidad yo he usado estas opciones, como ves pongo mínimo API-8 que es Android 2.2, y el target y compile With con la API-21.
Como no me quiero liar mucho (de momento) le digo que no quiero un ICONO personalizado, y que me cree una activity (que será la de la pantalla blanca).
Ahora le digo que me cree la Activity vacía, usando una de las plantillas que sugiere este asistente, como te dije antes, seleccionamos la mas sencilla "Empty Activity" y pulsamos en Siguiente.
Ya solo nos queda asignar los nombres que van a tener, yo he puesto "FondoBlanco" para la Activity (codigo JAVA) y "activity_fondo_blanco" (para el fichero gráfico XML) que contendrá el diseño gráfico, y finalmente pulsamos en Finalizar.
Paso2. Modificar codigo del nuevo proyecto Android
Bueno, hasta aquí todo fácil ¿no? ahora en tu PC deberías tener algo muy parecido a esto. Como veras estos asistentes te crean algunas cosas de mas, pero no pasa nada, cuando tengas mas experiencia (y eres maniaco como yo) puedes "limpiar" codigo que no se necesita, pero AHORA no es obligatorio, si no tienes errores no hay problema! :). Una cosa muy importante aquí es que por tema de compatibilidad, se agrega esta librería automáticamente "appcompat_v7" no la borres ni la cierres, debe estar así.
Bueno, comenzare por el codigo de esta activity nueva, el diseño gráfico no habría que tocarlo mucho, yo e querido personalizar un poco ese fondo blanco y he añadido mi nombre en la esquina superior derecha, quedaría de la siguiente forma:
<RelativeLayout 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="@android:color/white" android:gravity="top|right" android:keepScreenOn="true" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="by kike" /> </RelativeLayout>
El codigo JAVA asociado a este diseño grafico seria el siguiente:
package es.epinanab.linterna_widget; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class FondoBlanco extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// para quitar titulo setContentView(R.layout.activity_fondo_blanco); //Para poner al maximo el brillo de la pantalla WindowManager.LayoutParams pantalla = getWindow().getAttributes(); //Asigno brillo MAXIMO (0=minimo 1=maximo) pantalla.screenBrightness = 1; getWindow().setAttributes(pantalla); } }
Recuerda, que lo que pretendemos hacer aqui es simplemente iniciar un Activity con un diseño que muestre una pantalla blanca (para que ilumine lo máximo en la oscuridad), por lo tanto, no necesitamos demasiado codigo, tan solo que ponga al máximo el brillo de la pantalla (para iluminar mas), como te comente antes, el sensor de luminosidad (si tenemos el brillo en AUTO) detectara que hay poca luz, por lo que ajustara el brillo al mínimo, nuestro codigo ajusta el brillo para esa Activity al máximo (que es 1).
Espero que quede mas o menos claro, en la siguiente lección seguiré con el resto de codigo, recuerda que puedes descargar el ejemplo completo de esta aplicación aquí. Se que soy mú pesao, pero como digo siempre: Se que al principio todo es muy lioso, pero veras que con practica no es tan difícil!! como te llevo diciendo todo el curso, esto es echarle horas! ;P
Si te a gustado este sitio, puedes hacer click en me gusta en Facebook, Google+, Tweeter... es el único precio que te pido por este trabajo! ;P. Compartiendo, ayudaras a otros a encontrar esta web! GRACIASSSS.