Sono nuovo ad Android. Io cosa sapere la differenza tra Intent
e BroadcastReceiver
. Sono più confuso con BroadcastReceiver
rispetto a Intent
.Ricevitore Android-Broadcast
Please help me out. Il codice semplice sarà utile.
Sono nuovo ad Android. Io cosa sapere la differenza tra Intent
e BroadcastReceiver
. Sono più confuso con BroadcastReceiver
rispetto a Intent
.Ricevitore Android-Broadcast
Please help me out. Il codice semplice sarà utile.
Ok, lo spiegherò con un esempio.
Supponiamo di voler creare un'app per controllare lo stato della metropolitana dalla sua pagina web. Voglio anche una notifica di sistema se la metropolitana non funziona bene.
avrò:
Activity
per mostrare i risultati.Service
per verificare se la metropolitana funziona e mostrare una notifica se non funziona.Broadcast Receiver
chiamato Alarm Receiver
per chiamare il servizio ogni 15 minuti.Mi permetta di mostrare un po 'di codice:
/* 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);
}
}
Spiegazione: Come si può vedere è possibile impostare un allarme. e quando viene ricevuto l'allarme, usiamo un intent
per avviare service
. Fondamentalmente il intent
è un msg che può avere azioni, un materiale serializzato.
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);
}
}
Spiegazione:
I service
si avvia e:
AsyncTask
che si occupa di aggiornare un notificare il Activity
Non ha senso per incollare il AsyncTask
, ma quando è finito chiama:
private void sendSubwayUpdates(LinkedList<Subway> subways) {
Intent intent = new Intent(NEW_SUBWAYS_STATUS);
intent.putExtra("subways", subways);
sendBroadcast(intent);
}
questo modo si crea un nuovo Intent
con una certa NEW_SUBWAYS_STATUS
azione, mettere dentro l'intento metropolitane e sendBroadcast
. Se qualcuno è interessato a ricevere queste informazioni, avrà un ricevitore.
Spero di essere stato chiaro.
PS: Alcuni giorni fa qualcuno ha spiegato broadcast e intenti in un modo molto interessante. Qualcuno vuole condividere la sua birra, quindi invia una trasmissione con l'intento di agire: "FREE_BEER" e con un extra: "Un bicchiere di birra".
Sei sicuro che puoi testarlo con Subway Alarm? – Sayka
Gli stati API:
Un BroadcastReceiver
è una classe di base per il codice che riceverà intenti inviati da sendBroadcast()
.
Un intento è una descrizione astratta di un'operazione da eseguire.
Quindi, un BroadcastReceiver
è solo un'attività che risponde a Intenti. È possibile inviare le proprie trasmissioni o persino il dispositivo Android in grado di inviare queste trasmissioni a livello di sistema, incluse cose come la batteria scarica o il dispositivo appena avviato.
Ritengo che BroadcastReceiver sia veramente confuso come parte dei servizi. Tuttavia, li ho usati alcune volte per avere messaggi di interattività semplici, come l'invio a uno nel back stack. Nessun servizio necessario per usarlo. "Ehi, c'è stato un cambio di utente. Rispondi ad esso!" –
Un BroadcastReceiver non è un'attività! – Shatazone
** Vedi questo link ** https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app/44881551#44881551 –