Bienvenidos sean a este post, una buena posibilidad que nos provee el sistema es la posibilidad de poder iniciar una aplicacion nuestra como un servicio una vez finalizada la carga del S.O., esto sin la intervencion del usuario, un ejemplo de esto podria ser un servicio de mensajeria instantanea el cual debera estar siempre atento a la recepcion de mensajes.

Anuncios

Para poder lograrlo solamente debemos crear un receptor de anuncios que se active con el anuncio de android.intent.action.BOOT_COMPLETED, y desde aqui podremos crear el servicio, para entender el concepto veamos un ejemplo simple.

Primero deberiamos crear una clase que extendera a BroadcastReceiver:

public class ReceptorArranque extends BroadcastReceiver {
	@Override
	public void onReceive(Context contexto, Intent intento){
		contexto.startService(new Intent(contexto, Servocio.class));
	}
}

Como pueden ver en este codigo cuando se reciba el anuncio esta clase se encargara a la clase Servicio, la cual procederemos a detallar a continuacion:

public class Servicio extends Service {
	@Override
	public void onCreate(){
		... Instrucciones ...
	}

	@Override
	public int onStartCommand(Intent intento, int flags, int idArran){
		... Instrucciones ...
	}

	@Override
	public void onDestroy(){
		... Instrucciones ...
	}

	@Override
	public IBinder onBind(Intent intento){
		return null;
	}
}

Como pueden ver aca tendremos todas las acciones relacionadas a nuestra clase, ahora solamente nos falta conceder los permisos y definiremos el receptor en nuestro archivo AndroidManifest.xml, primero agregaremos los permisos para poder detectar el booteo completo:

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

Nuestra siguiente modificacion sera dentro del tag application donde agregaremos el siguiente bloque:

<application>
... Instrucciones ...
	<receiver android:name="ReceptorArranque">
		<intent-filter>
			<action 
			   android:name="android.intent.action.BOOT_COMPLETED" />
		</intent-filter>
	</receiver>
</application>

Con estas modificaciones basicas podremos hacer un servicio que cargue una actividad cuando el inicio este completo. Para entender mejor este concepto volvamos a abrir nuestro proyecto ServiciosMusica creada en este post, sino lo tienen les recomiendo hacerlo antes de seguir con esta modificacion.

Una vez abierta nuestra app, vamos a hacer un par de modificaciones en la misma la primera de ellas sera crear una nueva clase y para ello haremos click con el boton derecho sobre el contenedor de las clases Java y seleccionen New -> Java class, en el nuevo cuadro que aparece deben modificar unicamente el campo Name con el valor ReceptorArranque, el resto debe quedar como aparece y pulsen Ok para crear la nueva clase, una vez creada deberemos modificar la clase con el siguiente codigo:

Anuncios
package org.example.serviciosmsica;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ReceptorArranque extends BroadcastReceiver {
    @Override
    public void onReceive(Context contexto, Intent intento){
        contexto.startService(new Intent(contexto,ServicioMusica.class));
    }
}

Este codigo se encarga de darle la posibilidad de poder recibir el anuncio de tipo broadcast, en este caso tendremos el metodo onReceive() el cual se encargara de recibir el anuncio y por medio de este le diremos que inicie una nueva actividad la cual sera iniciar a la clase ServicioMusica, nuestra siguiente modificacion sera sobre el archivo AndroidManifest.xml donde primero agregaremos los permisos que concederemos:

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

Este permiso nos concedera la posibilidad de poder escuchar al anuncio de cuando el S.O informa cuando el inicio ha sido completado, nuestra siguiente modificacion sera un nuevo bloque dentro del bloque application:

<receiver android:name=".ReceptorArranque">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Este sera el encargado de recibir el anuncio de broadcast y en este caso le decimos que reciba cuando inicio ha sido completado, este se encargara de enviar la notificacion al programa y procedera a ejecutar lo solicitado, si lo compilamos y lo probamos no notaremos ninguna diferencia pero si reinician el telefono o el emulador ocurre lo que se ve en el siguiente video

Perdon por la calidad pero es lo que hay 😊

El video es un poco largo pero lo hice asi para que vean como es el inicio de nuestro equipo ahora, se llama perfectamente a nuestra app ServiciosMusica, aunque el sonido sea pesimo, vemos tambien que la notificacion se creo correctamente teniendo un correcto funcionamiento de nuestro servicio, nuestro siguiente tema sera hablar sobre los anuncios de broadcast permanentes.

Nota: Les recomiendo desinstalar la app una vez terminado el ejemplo porque sino cada vez que abran el dispositivo, emulado o no, se ejecutara la musica de fondo y no es tan placentero.

Android nos permite dos tipos de broadcast: normales y permanentes. Este ultimo tipo de broadcast llegara a los receptores que actualmente esten escuchando pero a su vez lo que instancien en el futuro, un ejemplo de anuncio permanente es ACTION_BATTERY_CHANGED. Por ejemplo si nosotros usaramos a registerReceiver(), en lugar de AndroidManifest.xml, podemos obtener la intencion de la ultima emision de este anuncio, esto nos podria dar la posibilidad de conocer el estado de la bateria sin necesidad de esperar un futuro cambio en su estado, este tipo de anuncios tambien se conocen como persistentes o pegajoso por su nombre en ingles (sticky)

Anuncios

En resumen, hoy hemos visto como se puede permitir que una actividad se pueda usar al inicio de nuestro S.O, esto desde un Android menor a 6.0 para estos casos lo veremos mas adelante, hemos modificado una app de otro ejemplo para permitirnos ver como funciona, prometo dentro de poco comprar mas RAM para mostrar mejores mis ejemplos, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00