Android3.1后Boot_COMPLETED廣播不響應的問題


 

http://blog.csdn.net/alex_hx/article/details/7501374
 

 

 

    在做Android開發時,很多應用由於各種目的,希望在機器啟動時被喚醒,一般的做法是寫一個BroadcastReceiver,接收對應的boot action,當然別忘了在Manifest中添加permission "android.permission.RECEIVE_BOOT_COMPLETED“。但是最近在做4.0開發時,有同事聲稱這個廣播接收不到了, 同時其他有人又說自己的能接收到,到底是怎么回事呢。

    原來,在3.1之后,系統的package manager增加了對處於“stopped state”應用的管理,這個stopped和Activity生命周期中的stop狀態是完全兩碼事,指的是安裝后從來沒有啟動過和被用戶手動強制停止 的應用,與此同時系統增加了2個Flag:FLAG_INCLUDE_STOPPED_PACKAGESFLAG_EXCLUDE_STOPPED_PACKAGES ,來標識一個intent是否激活處於“stopped state”的應用。當2個Flag都不設置或者都進行設置的時候,采用的是FLAG_INCLUDE_STOPPED_PACKAGES的效果。

    有了上面的新機制之后,google覺得給所有的廣播intent默認加上FLAG_EXCLUDE_STOPPED_PACKAGES會非常的Cooooool,能在一定程度上避免流氓軟件、病毒啊干壞事,還能提高效率,就導致了本文題目中說的問題,RECEIVE_BOOT_COMPLETED廣播如果用戶沒有運行過應用,就不會響應了。

    不過google還是留了點余地,允許應用和后台服務通過給廣播intent設置FLAG_INCLUDE_STOPPED_PACKAGES來喚醒處於“stopped state”的程序,也就是用戶自己寫的廣播intent可以控制這個機制,但是系統自帶的廣播intent,由於不能修改,就只能接受這個現實了。

   

    在3.1的更新文檔中,能夠找到上述修改的說明:http://developer.android.com/sdk/android-3.1.html#launchcontrols

 

但是如果是系統級的app就不受此限制


免責聲明!

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



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