Usuario:ManuelRomero/Android2/PrimerPrograma/Broadcast
De WikiEducator
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
- Es otro componente de un desarrollo de android
- Reciben notificaciones o eventos que ocurren en el sistema y reaccionan ante ellos
- Esta notificación puede venir de otra aplicación externa que la envío o del entorno (por ejemplo entra una llamada)
- No tienen interfaz asociada
- Se implementa a partir de la clase BroadCastReceiver
- Su ciclo de vida es muy corto, solo están activos mientras se ejecuta el método onReceive (Context, Intent), que es equivalente al onCreate(Bundle) de otros componentes.
- El objeto Context nos pasa es estado actual, y el intent, nos permitirá lanzar el evento.
Hagamos un ejemplo
http://androideity.com/2011/11/01/broadcast-receivers-en-android/
- En este caso vamos a simular que cuando llaman por telefono queremos registrar la llamada
- Creamos una clase que herede de BroadCastReceiver
public class BroadcastRecieverLlamadas extends BroadcastReceiver {
- Ahora lo que escribamos en el método onReceive() es lo que se ejecutará cuando se reciba el evento
- Para especificar el /los eventos aplicación responda en caso de que sea del sistema, hay que especificarlo en el -manifest con el atributo intent-filter
<intent-filter> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter>
- Con esto le decimos que nos notifique cuando entre una llamada
- Por su puesto hay que dar permisos para que nuestra aplicación vea el estado del teléfono
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
- Con esto cuando entre una llamada se ejecutará el método onReceiver() de nuestro programa
- Vamos a ver qué hacemos, el método onRecive() tiene dos parámetros
- El intent trae inforamción del evento que se ha generado
- Con esta información creamos un objeto Bundle Con la información que trae el evento
Bundle extras = intent.getExtras();
- Verificamos que haya información, en cuyo caso TelephoneManager.EXTRA_STATE nos da información de la llamada entrante
String state = extras.getString(TelephonyManager.EXTRA_STATE);
- -Ahora verificamos que el teléfono está sonando, en cuyo caso visualizamos el número de teléfono de la llamada entrante
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
String phoneNumber = extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
... }
A continuación el código completo
package com.example.receptorllamadas; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.TelephonyManager; import android.util.Log; public class BroadcastRecieverLlamadas extends BroadcastReceiver { final /** Called when the activity is first created. */ @Override public void onReceive(Context context, Intent intent) { Bundle extras = intent.getExtras(); if (extras != null) { String state = extras.getString(TelephonyManager.EXTRA_STATE); Log.w("DEBUG--------->", state); if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) { String phoneNumber = extras .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.w("DEBUG--------->", phoneNumber); } } } }
<receiver android:name="BroadcastReceiverLlamadas"> <intent-filter> <action android:name="android.intent.action.PHONE_STATE"/> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.READ_PHONE_STATE"/>