關(guān)于系統(tǒng)發(fā)送的廣播應(yīng)用接收不到的問題


問題解決記錄

最近發(fā)現(xiàn)了一個問題,我們的APK只能夠接收待機(jī)下去的廣播,而接收不到待機(jī)起來的廣播。這就很奇怪了,于是便找到了系統(tǒng)發(fā)送待機(jī)和待機(jī)起來廣播的相關(guān)類。
frameworks\base\services\java\com\android\server\power\Notifier.java
從里面找到下面這段代碼,可以看到對于開機(jī)和待機(jī)廣播發(fā)送的代碼其實是一樣的。

mScreenOnIntent = new Intent(Intent.ACTION_SCREEN_ON);
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND);
mScreenOffIntent = new Intent(Intent.ACTION_SCREEN_OFF);
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND);

既然如此,按理說我們的應(yīng)用是可以接到到兩個廣播才對啊,不然就應(yīng)該兩個都收不到。于是便進(jìn)一步分析自己的應(yīng)用。分析后來發(fā)現(xiàn),接受待機(jī)廣播是靜態(tài)注冊的,而接收待機(jī)起來的廣播是動態(tài)注冊的。這時候可以注意到,兩個 TAG 里面有一個Intent.FLAG_RECEIVER_REGISTERED_ONLY

我們查了一下,發(fā)現(xiàn)如果發(fā)送廣播時設(shè)置了這個標(biāo)志,那只會調(diào)用靜態(tài)注冊了的接收器——BroadcastReceiver組件不會被啟動。所以這里就很明白了,因為我們需要比較快的接收到待機(jī)廣播,從而做出處理,所以這里我們采用了優(yōu)先級較高的動態(tài)注冊,這樣會一定程度上的防止接收不到廣播的問題。那么要解決這個問題,只要在發(fā)送待機(jī)起來廣播的時候把相應(yīng)的TAG去掉就好,所以修改后代碼如下:
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);

關(guān)于廣播接收器的一些參考資料

廣播接收器注冊的兩種形式

  • 靜態(tài)注冊
    非常駐型廣播,也就是說廣播跟隨activity的生命周期。注意: 在activity結(jié)束前,移除廣播接收器。
  • 動態(tài)注冊
    常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來,程序也會被系統(tǒng)調(diào)用自動運(yùn)行

廣播的類型:

  1. 有序廣播

    1. 優(yōu)先級高的先接收
    2. 同優(yōu)先級的廣播接收器,動態(tài)優(yōu)先于靜態(tài)
    3. 同優(yōu)先級的同類廣播接收器,靜態(tài):先掃描的優(yōu)先于后掃描的,動態(tài):先注冊的優(yōu)先于后注冊的。
  2. 普通廣播

    1. 無視優(yōu)先級,動態(tài)廣播接收器優(yōu)先于靜態(tài)廣播接收器
    2. 同優(yōu)先級的同類廣播接收器,靜態(tài):先掃描的優(yōu)先于后掃描的,動態(tài):先注冊的優(yōu)先于后注冊的。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • 現(xiàn)實中的廣播:電臺為了傳達(dá)一些消息而發(fā)送廣播,通過廣播攜帶要傳達(dá)的消息,群眾只要買一個收音機(jī),就可以收到廣播了。 ...
    stevewang閱讀 4,384評論 0 8
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,496評論 6 13
  • 廣播接收器 是Android的四大組件之一,可見廣播在Android中的重要性; 1. 什么是廣播? 廣播(Bro...
    Lost_Robot閱讀 2,059評論 2 10
  • 一、財商是什么? 書面語:財商是賺錢能力、管錢能力和花錢能力的集合,財商的高低直接決定了一個人是否能夠有效的進(jìn)行財...
    那一粒塵閱讀 294評論 4 7

友情鏈接更多精彩內(nèi)容