2010-08-30 15 views
12

Soy nuevo en Android. Yo qué saber la diferencia entre Intent y BroadcastReceiver. Estoy más confundido con BroadcastReceiver que Intent.Android-Broadcast Receiver

Por favor, ayúdenme. El código simple será útil.

+0

** Vea este enlace ** https://stackoverflow.com/questions/15698790/broadcast-receptor-para-comprobar-internet-conexión-en-android-app/44881551#44881551 –

Respuesta

30

Bien, lo explicaré con un ejemplo.

Supongamos que quiero crear una aplicación para verificar el estado del metro desde su página web. También quiero una notificación del sistema si el metro no funciona bien.

que tendrá:

  • Un Activity para mostrar resultados.
  • A Service para comprobar si el metro está funcionando y mostrar una notificación si no está funcionando.
  • A Broadcast Receiver llamado Alarm Receiver para llamar al servicio cada 15 minutos.

Deja que te enseñe algo de código:

/* AlarmReceiver.java */ 
public class AlarmReceiver extends BroadcastReceiver { 
    public static final String ACTION_REFRESH_SUBWAY_ALARM = 
      "com.x.ACTION_REFRESH_SUBWAY_ALARM"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startIntent = new Intent(context, StatusService.class); 
     context.startService(startIntent); 
    } 
} 

Explicación: Como se puede ver se puede establecer una alarma. y cuando se recibe la alarma, usamos un intent para iniciar el service. Básicamente, el intent es un mensaje que puede tener acciones, un material en serie.

public class StatusService extends Service { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mAlarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intentToFire = new Intent(AlarmReceiver.ACTION_REFRESH_ALARM); 
     mAlarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); 
    } 

    @Override 
    public void onStart(Intent intent, int arg1) { 
     super.onStart(intent, arg1); 
     Log.d(TAG, "SERVICE STARTED"); 
     setAlarm(); 
     Log.d(TAG, "Performing update!"); 
     new SubwayAsyncTask().execute(); 
     stopSelf(); 
    } 

    private void setAlarm() { 
     int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
     mAlarms.setInexactRepeating(alarmType, SystemClock.elapsedRealtime() + timeToRefresh(), 
        AlarmManager.INTERVAL_HALF_DAY, mAlarmIntent); 
    } 

} 

Explicación:

Los service aperturas y:

  • definir una alarma para la siguiente llamada. (Marque la intención se utiliza sólo un msg.)
  • llama un AsyncTask que se encarga de la actualización de una notificación a la Activity

No tiene sentido para pegar el AsyncTask pero cuando se terminó llama:

private void sendSubwayUpdates(LinkedList<Subway> subways) { 
     Intent intent = new Intent(NEW_SUBWAYS_STATUS); 
     intent.putExtra("subways", subways); 

     sendBroadcast(intent); 
} 

Esto crea una nueva Intent con una cierta NEW_SUBWAYS_STATUS acción, poner dentro de la intención de los trenes subterráneos y sendBroadcast. Si alguien está interesado en obtener esa información, tendrá un receptor.

Espero haber sido claro.

PD: Hace algunos días alguien explicó la transmisión y los intentos de una manera muy buena. Alguien quiere compartir su cerveza, por lo que envía una transmisión con la intención de actuar: "FREE_BEER" y con un extra: "Un vaso de cerveza".

+0

¿Está seguro de que puede probarlo con Subway Alarm? – Sayka

3

Los estados API:

Un BroadcastReceiver es una clase base para el código que recibirá las intenciones enviadas por sendBroadcast().

Un intento es una descripción abstracta de una operación que se realizará.

Por lo tanto, un BroadcastReceiver es solo una actividad que responde a Intents. Puede enviar sus propias transmisiones o incluso el dispositivo Android puede enviar estas difusiones de todo el sistema, incluidas cosas como la batería baja, o el dispositivo recién arrancado.

+0

Creo que BroadcastReceivers se confunde mucho como parte de los servicios. Sin embargo, los he usado algunas veces para tener mensajes simples entre actividades, como enviar a uno en la pila de respaldo. No se necesitan servicios para usarlo. "Oye, ha habido un cambio de usuario. ¡Responde!" –

+1

¡Un BroadcastReceiver no es una actividad! – Shatazone

Cuestiones relacionadas