我是android新手。我怎麼知道Intent
和BroadcastReceiver
之間的區別。 BroadcastReceiver
比Intent
更令我困惑。Android廣播接收器
請幫我一把。簡單的代碼將會有所幫助。
我是android新手。我怎麼知道Intent
和BroadcastReceiver
之間的區別。 BroadcastReceiver
比Intent
更令我困惑。Android廣播接收器
請幫我一把。簡單的代碼將會有所幫助。
好吧,我會用一個例子來解釋它。
讓我們假設我想創建一個應用程序來檢查其網頁的地鐵狀態。如果地鐵工作不正常,我還想要系統通知。
我將有:
Activity
顯示結果。Service
檢查地鐵是否正常工作,如果不工作,則顯示通知。Broadcast Receiver
調用Alarm Receiver
每15分鐘致電該服務。讓我告訴你一些代碼:
/* 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);
}
}
說明: 正如你可以看到你可以設置鬧鐘。當收到警報時,我們使用intent
啓動service
。基本上intent
是一個味精,可以有行動,一個序列化的東西。
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);
}
}
說明:
的service
開始和:
AsyncTask
這需要更新的護理的通知Activity
它沒有意義粘貼AsyncTask
但是當它完成它調用:
private void sendSubwayUpdates(LinkedList<Subway> subways) {
Intent intent = new Intent(NEW_SUBWAYS_STATUS);
intent.putExtra("subways", subways);
sendBroadcast(intent);
}
這將創建一個新Intent
具有一定NEW_SUBWAYS_STATUS
動作,把意圖內的地鐵和sendBroadcast
。如果有人有興趣獲得該信息,它將有一個接收器。
我希望我明確自己。
PS:幾天前有人以非常酷的方式解釋廣播和意圖。 有人想分享他的啤酒,所以他發送了一個廣播 意圖採取行動:「FREE_BEER」,並與一個額外的:「一杯啤酒」。
您確定我們可以用地鐵報警器進行測試嗎? – Sayka 2016-04-11 19:58:12
的API狀態:
甲BroadcastReceiver
爲代碼,將接收由發送sendBroadcast()
意圖的基類。
意圖是要執行的操作的抽象描述。
因此,BroadcastReceiver
只是一個響應Intents的Activity。您可以發送自己的廣播,甚至Android設備也可以發送這些系統廣播,包括電池電量不足或設備剛剛啓動等。
我覺得BroadcastReceivers作爲服務的一部分非常困惑。但是,我已經使用了它們幾次來獲得簡單的活動間消息,例如發送給後端堆棧中的一個。根本不需要任何服務來使用它。 「嘿,用戶發生了變化,迴應它!」 – 2012-10-08 14:39:14
BroadcastReceiver不是一項活動! – Shatazone 2013-02-22 13:48:55
**請參閱此鏈接** https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app/44881551#44881551 – 2017-09-12 12:16:55