Diferencia entre revisiones de «Usuario:ManuelRomero/Android2/PrimerPrograma/Broadcast»
De WikiEducator
Línea 9: | Línea 9: | ||
* 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. | * 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. | *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 | ||
+ | <source lang=java> | ||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang=xml> | ||
+ | <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"/> | ||
+ | </source> |
Última revisión de 23:53 29 may 2013
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"/>