Android 8.0對隱式廣播的進一步限制


項目targetSdkVersion升級到26后,對應的的是Android O版本,即Android 8.0系統。經測試發現針對8.0及以上安卓版本手機,AndroidMainfest.xml中靜態注冊的廣播接收器失效,當App中對應intent filter類型廣播發出時,廣播接收器中的onReceive方法並未被系統回調。
 
且在Android Studio Logcat中,出現如下所示錯誤信息提示:

2018-12-20 17:34:55.588 749-767/system_process W/BroadcastQueue: Background execution not allowed: receiving Intent { act=com.corn.ui.setting.Action.TEST_BROADCAST flg=0x10 } to com.corn/.biz.setting.CornTestBroadcastReceiver
 
核查Android官方文檔,Android 8.0系統,對后台執行有進一步限制,包括對隱式廣播的限制。

對應Logcat中信息,搜索Android framework源碼,按Logcat中的日志關鍵詞搜索到對應代碼位置。
這里推薦使用 http://androidxref.com/
可以選定Andrid版本,以及對應源碼項目等搜索項搜索。
 
 
上圖else if中條件,與官方文檔闡述一致,想要廣播發送繼續生效,可以使此條件不滿足即可。
對應的,一般可以指定對應的廣播接收器Component,或對應的廣播接收器包名。
對應intent,常用的具體方法可以是:intent.setClass()或intent.setComponent()或intent.setPackage()等寫法
 
進一步,官方文檔中指出了ACTION_PACKAGE_REPLACED 就是一種隱式廣播,而ACTION_MY_PACKAGE_REPLACED 則為顯式廣播,可以通過搜索代碼進一步核實下,看看基本寫法是否與上述邏輯一致。
 
 
可見,源碼中寫法與上述分析一致。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM