Desarrollo de Android Apps - BroadcastReceiver

Desarrollo de Android Apps - BroadcastReceiver
Desarrollo Android Apps - BroadcastReceiver

En este tutorial voy a hablar de los BroadcastReceivers. Dichos componentes permiten registrar eventos que se produzcan en el SO Android, como por ejemplo cuando se recibe una llamada, se está agotando la batería, se enciende el smartphone, se añade un evento al calendario,...

CREAR UN BROADCASTRECEIVER NUEVO

Para crear un nuevo BroadcastReceiver en Android Studio tendremos que hacer clic derecho -> New -> Other -> Broadcast Receiver.

[caption id="attachment_12047" align="aligncenter" width="554"]

ReceiversI

Crear un BroadcastReceiver nuevo en Android Studio[/caption]

Una vez hecho esto, quedará definido automáticamente en el manifest, y se creará la clase que hereda de BroadcastReceiver.

  • BroadcastReceiver declarado en el manifest:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jlnavarro.services" > <application android:allowBackup="true" android:label="@string/app_name" . . . <receiver android:name="com.jlnavarro.services.MyReceiver" android:enabled="true" android:exported="true" > </receiver> </application> </manifest>

  • Clase MyReceiver que hereda de BroadcastReceiver:

public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. throw new UnsupportedOperationException("Not yet implemented"); } }

También tendremos que declarar en el manifest los Intents que recibirá la clase. Por ejemplo, incluiremos un evento de los más típicos: el de inicio del SO. De esta forma, siempre que se encienda el smartphone, se llamará a nuestro BroadcastReceiver.

  • Intent que recibirá el BroadcastReceiver:

<receiver android:name="com.jlnavarro.services.MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" > </action> </intent-filter> </receiver>

Destacar que para que funcione nuestro BroadcastReceiver, muchas veces tendremos que añadir algún permiso. En nuestro caso, añadiremos el que nos permita recibir el Intent  indicando que el sistema operativo ha terminado de iniciarse.

  • Permiso para poder recibir el ACTION_BOOT_COMPLETED:

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

Algunos ejemplos de eventos que podemos capturar son:

  • AIRPLANE_MODE: Modo avión.
  • BATTERY_LOW: Batería baja.
  • BOOT_COMPLETED: Inicio del sistema operativo.
  • SCREEN_OFF: Pantalla apagada.
  • SCREEN_ON: Pantalla encendida.

Recordad que si trabajamos con Eclipse tendremos que crear la clase y declarar todo lo demás de forma manual.

EJEMPLO DE APLICACIÓN

Para comprobar el funcionamiento del BroadcastReceiver, vamos a hacer una App que inicie el servicio creado en el tutorial anterior, siempre que se encienda el smartphone. Para ello, lo único que tendremos que hacer es iniciar nuestro servicio desde la clase MyReceiver anteriormente creada.

  • Iniciar el servicio desde el BroadcastReceiver:

public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Servicio iniciado desde BroadcastReceiver", Toast.LENGTH_SHORT).show(); context.startService(new Intent(context, MyService.class)); } } Acordaos que para detener el servicio tendréis que entrar en la App y pulsar el botón de Off. Hasta aquí el tutorial sobre BroadcastReceiver, y si tenéis alguna duda, ¡no dudéis en preguntar! ¡Un saludo!