VIII.5. Correr una aplicación en segundo plano.

Existen aplicaciones como WhatsApp, que trabajan en segundo plano, sin que el usuario tenga necesidad de iniciarla manualmente, esto garantiza que la tarea se lleve a cabo de manera continua mientras el dispositivo se encuentre encendido. Las aplicaciones que trabajan en segundo plano se inician con el arranque del dispositivo.

Por otra parte, la implementación del inicio de una aplicación desde el encendido debe hacerse con precaución, ya que podría violar la seguridad del dispositivo del usuario. Cuando se lanza una aplicación de este tipo, la empresa distribuidora de las aplicaciones (Google) realiza una averiguación previa y en caso de resultar un software malicioso el siste ma operativo lo considerará como riesgoso.

Para la implementación del inicio de una aplicación desde el encendido del dispositivo se necesita crear una nueva clase independiente de las clases que requiera la aplicación para su funcionamiento, donde se here de de la clase BroadcastReceiver, para que el método onReceive( ) se encargue de manejar cualqu ier intención de acción que el sistema haga

  • onReceive(Context context, Intent intent)

También necesitamos las siguientes constantes que proporciona la clase Intent:

  • ACTION_BOOT_COMPLETED: Indica que el sistema de arranque ha terminado.
  • FLAG_ACTIVITY_NEW_TASK: Cuando se añade esta bandera, el activity correspondiente se convertirá en el inicio de una nueva tarea en la pila de procesos.

Para que la aplicación funcione correctamente desde el encendido, es importante asignar el siguiente permiso en el archivo Manifest, el cual permite que se notifique cuando el estado del dispositivo sea "encendido", es decir, cuando ya se completó l a inicialización.

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

Por último, también se debe agregar en el archivo Manifest un elemento html llamado "receiver", que actúa como listener , es decir, un proceso que se utiliza para detectar eventos. El "receiver" sirve para detectar que se completó el proceso de encendido del dispositivo.

<receiver android:name="NOMBRE DE LA CLASE INVOCADORA">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>