Android監聽系統廣播 和自定義廣播遇到的問題
阿新 • • 發佈:2019-01-23
現在有一個專案需要做一個開機自啟動的功能,這個怎麼實現呢?一頓咔咔咔百度,發現很多推薦 使用監聽系統開機廣播BOOT_COMPLETED,CONNECTIVITY_CHANGE
來實現。那好吧 我也這麼來做。先寫一個RootReceiver extends BroadcastReceiver ,在onReceiver中 做自己想做的邏輯 ,然後在mianfest中註冊 BOOT_COMPLETED,CONNECTIVITY_CHANGE。記得新增開機啟動許可權
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".RebootReceiver" android:directBootAware="true" android:enabled="true" android:exported="true" tools:targetApi="n"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED"/> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter>
</receiver>
public class RebootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,Intent intent) { MLod.Log("e", null, "RebootReceiver", "onReceive: ->" + intent.getAction()); if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) || ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) || intent.getAction().equals(Intent.ACTION_LOCKED_BOOT_COMPLETED) || intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
Log.i("TAG","");
}}}基本上就是上面三步驟 然後開始除錯了 我用的手機是vivo。(很坑爹) 然後除錯了 我是在開機後 不啟動app 然後切換網路 發現根本監聽不到系統廣播,這是為什麼呢?繼續一頓咔咔咔百度,原來3.1後 Android 不讓app在安裝後一次都沒有開啟後 監聽系統廣播,系統會把安裝的app設為stopped狀態。 那好吧 既然這樣 我先啟動一下,這時候 可以監聽到網路狀態變化 一看 有戲,然後開關機試試 ,又不行了,坑爹阿 ,為啥呢 不是開機一次就可以了嗎?遇到這情況 ,換個手機試試把,就是這樣,換個手機 有時候 不是自己程式碼的問題。 換了個pad,沒問題了 可以監聽。 現在又突然了一個需求 ,需要監聽一個自定義的廣播,那隻要在mainfest裡面加上action ,然後不就可以了嘛。我把action一開始寫在一個intent-filter裡面 ,然後又監聽不到系統廣播了,又一頓咔咔咔百度谷歌,嘗試了下 把系統廣播 和自定義廣播 action 分開用intent-filter 寫 ,沒問題了,原因不太懂,有大神知道可以告訴一下。