1. 程式人生 > >Android監聽系統廣播 和自定義廣播遇到的問題

Android監聽系統廣播 和自定義廣播遇到的問題

現在有一個專案需要做一個開機自啟動的功能,這個怎麼實現呢?一頓咔咔咔百度,發現很多推薦 使用監聽系統開機廣播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 寫 ,沒問題了,原因不太懂,有大神知道可以告訴一下。