Diferencia entre revisiones de «Usuario:ManuelRomero/Android2/PrimerPrograma/Broadcast»

De WikiEducator
Saltar a: navegación, buscar
 
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 22:53 29 may 2013

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