![](/img/trans.png)
[英]How to pass context var when I use IntentService in BroadcastReceiver?
[英]How to pass context to BroadcastReceiver?
我需要將活動上下文傳遞給MyAlarmReceiver extends BroadcastReceiver
onReceive
MyAlarmReceiver extends BroadcastReceiver
類。 為此,我在設置意圖時傳遞了上下文:
myAlarmManager.set(AlarmManager.RTC_WAKEUP, d.getTime(),
PendingIntent.getBroadcast(MainActivity.this, 1,
myIntentAlarm, PendingIntent.FLAG_ONE_SHOT));
但是, onReceive
上下文與myAlarmManager
傳遞的myAlarmManager
。 為什么?
提供給BroadcastReceiver
的Context
與用於創建BroadcastReceiver
的Context
或您可以修改的任何內容都不相同。 它是Context
的有限變體,是框架故意設計的。 如果您在BroadcastReceiver
有重要的事情要做,則需要啟動自己的Service
或使用其他某種機制來觸發它。
在那里,此上下文用於創建和顯示AlertDialog
基於警報觸發對話框對用戶來說是相當危險的。 您當時不知道用戶在做什么,並且對話框可能會干擾用戶(例如,您在他們的實時逐行導航會話中彈出一個對話框)。 請始終使用Notification
,也可以根據用戶偏好使用。
除此之外,警報響起時,您將不再依賴原始的MainActivity
實例。 畢竟,如果您安排將警報安排在從現在開始的一周內發生,那顯然是很明顯的,那么原始活動實例早就被銷毀了。
歡迎您在事件總線( LocalBroadcastManager
,greenrobot的EventBus等)上發布事件。 這樣,如果確實碰巧在前台有UI,則它可以顯示對話框。 而且,如果你不正好有在前台界面,你可以做其他的東西(例如,顯示Notification
)。 我有一些示例應用程序針對LocalBroadcastManager
和greenrobot的EventBus對此進行了顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.