Usuario:ManuelRomero/Android2/PrimerPrograma/Broadcast

De WikiEducator
< Usuario:ManuelRomero‎ | Android2
Revisión a fecha de 23:53 29 may 2013; ManuelRomero (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
Road Works.svg Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos.
Ver página de charlas.
Road Works.svg




  • 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"/>