arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Auto-Ejecución de una aplicación al inicio de un dispositivo con Android

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 2 Min. de lectura

remove_red_eye 73580 visitas

calendar_today 25 Octubre 2014

Es posible que nos encontremos (o ya estemos) con la problemática de desarrollar una aplicación que se ejecute de manera automática cuando el dispositivo encienda. Este problema se soluciona fácilmente en solo dos archivos sin mayor grado de complejidad.

Ejemplo:

Una vez que nos encontremos en nuestra aplicación 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 móvil, en esta clase implementamos la clase onReceive, que recibe como parámetros 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 método  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 líneas 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_COMPLETED">
 </receiver>

Con esto indicamos a la aplicación 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 líneas:

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

Estas nuevas lineas de código 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 línea:

<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_COMPLETED">
           
            <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 método onReceive colocamos las siguientes líneas de código:

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

Con estas 3 nuevas líneas que acabamos de agregar nuestra aplicación ya tiene la posibilidad de ejecutar un Activity.

  • Con la primera línea de código indicamos que vamos a crear una objeto de tipo Intent, Colocamos el contexto y la clase que deseamos que se ejecute.
  • En la segunda línea mandamos a llamar al Activity, debido a que no estamos dentro de un Activity para realizar esta tarea nos apoyamos del método addFlags de la clase Intent la cual nos provee una solución.
  • Para finalizar la última línea ejecuta nuestro Activity creado.

Extra:

En caso deseemos ejecutar un  servicio y no un Activity procedemos a modificar el método onReceive dejándolo 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 más 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 acción a realizar, que  en este caso lo llamamos "ServicioCodigoFacilito". 

Si se dan cuenta esta acción es la que se ejecuta en el  método 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  automática en nuestro dispositivo.


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