You are on page 1of 4

Auto-Ejecucin de una aplicacin al

inicio de un dispositivo con Android


Eduardo GP.

@eduardo_gpg

Es posible que nos encontremos (o ya estemos) con la problemtica de desarrollar una


aplicacin que se ejecute de manera automtica cuando el dispositivo encienda. Este
problema se soluciona fcilmente en solo dos archivos sin mayor grado de
complejidad.

Ejemplo:

Una vez que nos encontremos en nuestra aplicacin ser necesario crear una nueva
clase con la cual controlaremos lo que debe ser ejecutado cuando el dispositivo
encienda.

En mi caso llamare a esta clase como Monitor, esta clase hereda de


BroadcastReceiver el cual nos permitir controlar los cambios de estado del
dispositivo mvil, en esta clase implementamos la clase onReceive, que recibe como
parmetros un objeto de tipo context y uno de tipo Intent.

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

public class Monitor extends BroadcastReceiver{


public void onReceive(Context context,Intent
intent) {
}
}

Una vez que tenemos nuestra clase heredando de BroadcastReceiver con el


mtodo onReceive, procedemos a modificar nuestro archivo AndroidManifest.xml
ya que esta clase necesita que sean programados los eventos a realizar una vez que el
dispositivo cambie su estado, es por ello que debemos agregar unas cuantas lneas a
nuestro archivo Manifest.

http://developer.android.com/training/monitoring-device-state/manifest-
receivers.html

Dentro del bloque de Aplication declaramos un receiver tal como el siguiente:

<receiver android:enabled="true"
android:name=".Monitor"

android:permission="android.permission.RECEIVE_BOOT_COMP
LETED">
</receiver>

Con esto indicamos a la aplicacin que cuando el dispositivo inicie se ejecute la clase
Monitor, que en este caso se encuentra dentro del paquete principal (Es por eso que
lleva el punto).

Dentro del bloque receiver colocamos las siguientes lneas:

<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED"/>
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>

Estas nuevas lineas de cdigo especificamos que tipos de eventos son posibles
responder, en este caso de nuestro BroadcastReceiver.

http://developer.android.com/guide/topics/manifest/intent-filter-element.html

Fuera del bloque de Aplication y dentro del bloque Manifest colocamos la siguiente
lnea:

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

Con la cual establecemos los permisos necesarios para este ejemplo, quedando nuestro
Manifest de esta forma:

</activity>
<receiver android:enabled="true"
android:name=".Monitor"

android:permission="android.permission.RECEIVE_BOOT_COMP
LETED">

<intent-filter>
<action
android:name="android.intent.action.BOOT_COMPLETED"/>
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED"
/>
</manifest>

Dentro de la clase Monitor (En mi caso) y el mtodo onReceive colocamos las


siguientes lneas de cdigo:

Intent i = new Intent(context, MainActivity.class);


i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

Con estas 3 nuevas lneas que acabamos de agregar nuestra aplicacin ya tiene la
posibilidad de ejecutar un Activity.

Con la primera lnea de cdigo indicamos que vamos a crear una objeto de tipo
Intent, Colocamos el contexto y la clase que deseamos que se ejecute.
En la segunda lnea mandamos a llamar al Activity, debido a que no estamos
dentro de un Activity para realizar esta tarea nos apoyamos del mtodo
addFlags de la clase Intent la cual nos provee una solucin.
Para finalizar la ltima lnea ejecuta nuestro Activity creado.

Extra:

En caso deseemos ejecutar un servicio y no un Activity procedemos a modificar el


mtodo onReceive dejndolo de la siguiente manera:

Intent serviceIntent = new Intent();


serviceIntent.setAction("ServicioCodigoFacilito);
context.startService(serviceIntent);

Para poder mandar a llamar a un service fuera de un Activity es necesario crear una
Action, para ellos modificamos un poco ms en Manifest:

<service android:name=".ServicioDemo">
<intent-filter>
<action
android:name="ServicioCodigoFacilito"></action>
</intent-filter>
</service>
Tal como lo vimos en el post de Servicios (http://codigofacilito.com/articulos/crear-
un-servicio-en-android) es necesario declarar el Serivico en el manifest, pero ahora
agregamos un intent-filter a este bloque. Agregamos la accin a realizar, que en este
caso lo llamamos "ServicioCodigoFacilito".

Si se dan cuenta esta accin es la que se ejecuta en el mtodo setAction, es por eso
que debemos ser cuidadosos y colocar el mismo nombre.

Prueba:

Con estas modificaciones en nuestro Manifest y con la nueva clase creada ya es


posible que nuestras aplicaciones se ejecuten de manera automtica en nuestro
dispositivo.

No dudes en dejar tus dudas y sugerencias en los comentarios del tutorial.

You might also like