2017-09-01 64 views
0

經過大量的搜索後,我仍然無法找到解決我的問題的方法:Android:如何從靜態BroadcastReceiver更新UI?

我需要一個每天運行一次的廣播,無論該應用程序是否在運行。但是,如果應用程序正在運行,我還需要在廣播結束後更新UI。

,因爲它與應用生命週期結束我不能使用編程方式註冊的廣播。但是從靜態清單註冊廣播我不能訪問UI(至少我不知道如何)。 一個選項是有2個不同的廣播,並取消/啓動onPause和onResume他們,但我不知道是否有一個更簡單的解決方案?

+0

無法運行,而不是'BroadcastReceiver'一個'Service'每天一次,? – pskink

+0

哎呀,我沒有看看服務,但因爲我是初學者,我被告知廣播是我正在尋找。我會馬上查找服務。 –

+0

並選中[約束服務(https://developer.android.com/guide/components/bound-services.html) – pskink

回答

1

你需要的東西是不broadcast receiverAlarmManagerJobScheduler的API上述21和greenrobot事件總線一起。

AlarmManager時刻表每天如果廣播叫你可以從eventbus觸發事件,並且在你想要的地方接收事件時廣播呼叫,每天一次或在任何你想要的時間和金錢。爲什麼使用事件總線的原因是我們不需要處理,如果視圖是可見的或不是。如果視圖處於重用狀態,它觸發事件視圖和一個方法被事件總線調用,並且在那個方法中你可以做任何你想做的事情。

親自因爲服務執行真的很貴現在是一個天,我不喜歡的服務。

注意:你把報警經理和廣播 接收器應該是「警戒」一些三星手機都非常優化,使 他們只會讓與「警報全面運行」包名包名。您 還需要在boot receiver如果手機被引導到登記接收和安排 alarmmanager萬一。

+0

謝謝,看起來是一個很好的解決方案。關於你的記錄:你的意思是,關鍵字「警報」必須在我的整個應用程序的包名稱(你在開始時設置),我只是在一個底層文件夾? –

+0

這不是官方的解決方案,但我面臨着s7邊緣的問題。並發現它正在工作。情境與你的情況不一樣,但它是相似的。包含警報管理器和廣播接收器的視圖更改包不應該是單獨的包,稱爲「警報」。最好將bootcomplete接收器保留在包的根目錄下。 –

+0

謝謝。但是,如果Receiver是MainActivity中的內部類,我該怎麼辦?我應該把整個MainActivity放到alert文件夾中嗎? –