簡體   English   中英

如何將上下文傳遞給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 為什么?

提供給BroadcastReceiverContext與用於創建BroadcastReceiverContext或您可以修改的任何內容都不相同。 它是Context的有限變體,是框架故意設計的。 如果您在BroadcastReceiver有重要的事情要做,則需要啟動自己的Service或使用其他某種機制來觸發它。

在那里,此上下文用於創建和顯示AlertDialog

基於警報觸發對話框對用戶來說是相當危險的。 您當時不知道用戶在做什么,並且對話框可能會干擾用戶(例如,您在他們的實時逐行導航會話中彈出一個對話框)。 請始終使用Notification ,也可以根據用戶偏好使用。

除此之外,警報響起時,您將不再依賴原始的MainActivity實例。 畢竟,如果您安排將警報安排在從現在開始的一周內發生,那顯然是很明顯的,那么原始活動實例早就被銷毀了。

歡迎您在事件總線( LocalBroadcastManager ,greenrobot的EventBus等)上發布事件。 這樣,如果確實碰巧在前台有UI,則它可以顯示對話框。 而且,如果你正好有在前台界面,你可以做其他的東西(例如,顯示Notification )。 我有一些示例應用程序針對LocalBroadcastManagergreenrobot的EventBus對此進行了顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM