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.
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.
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á:
Activity
para mostrar resultados.Service
para comprobar si el metro está funcionando y mostrar una notificación si no está funcionando.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:
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".
¿Está seguro de que puede probarlo con Subway Alarm? – Sayka
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.
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!" –
¡Un BroadcastReceiver no es una actividad! – Shatazone
** Vea este enlace ** https://stackoverflow.com/questions/15698790/broadcast-receptor-para-comprobar-internet-conexión-en-android-app/44881551#44881551 –