Android無法收到指定廣播的問題總結

2021-07-30 18:41:20 字數 876 閱讀 1825

簡單的小例子,乙個是只有乙個receiver捕捉有網路改變的常駐廣播,另外乙個是在第乙個的基礎上增加了乙個activity。試驗證明,第一種情況是收不到廣播的! 第二種情況是可以收到廣播的。所以android程式中,不能只有乙個receiver元件,必須還要activity。據說這是google對android應用程式安全的考慮,防止流氓軟體潛水消耗資源,正所謂禁止潛水也!

一 、問題現象 

最近專案上遇見這樣乙個需求,在程式安裝之後,需要收到特定廣播,我當時想到的方案是在androidmainfest檔案裡新增乙個靜態註冊的廣播,比如:

本以為這樣就完事了,但是在測試過程中發現如果程式曾經啟動過一次,那麼一切都正常,如果是新安裝應用,重來都沒啟動過,這個時候是收不到廣播的。

二、問題分析 

一查發現這是因為android在3.1以後將新安裝的應用置為「stopped」狀態,此時應用無法收到其他應用的廣播,只有當應用啟動過一次之後這個狀態才會改變。

三、問題解決方法 

這個問題我們需要修改兩個地方來解決, 

1、在靜態註冊廣播的時候 指定exported = true

2、在傳送intent的地方加上flag_include_stopped_packages

intent intent = new intent();

intent.setaction("***.***");

intent.addflags(intent.flag_include_stopped_packages);

sendbroadcast(intent);

android 4 0以上無法收到開機廣播

前面的文章 android 開機廣播的使用 中已經提到android的開機啟動,但是在android 4.0 有時可以接收到開機啟動廣播,有時卻不可以。經過分析發現,如果應用程式安裝上始終沒有被開啟過,那麼在android啟動時,該應用無法接收到開機啟動廣播android.permission.re...

如何解決App無法收到android開機廣播

今天發現在android2.2時寫的一款程式執行在android4.0上的時候無法接受開機廣播 action boot completed 後來發現是沒有新增的問題。在3.1以前,android對自啟動管理不是很嚴格,只要你的broadcastreceiver的intentfilter宣告了就可以接...

無法收到redis訂閱訊息

現網程式執行一段時間後,經常發現收不到redis訂閱訊息。輸入client list查詢redis連線資訊,輸出如下資訊 id 2375018 addr 120.15.207.135 9159 fd 663 name subarea age 3324 idle 563 flags n db 0 su...