天天看點

Android 開機啟動廣播

前言

Android應用開發過程中可能會有需要在移動裝置開機之後做一些應用相關的操作。比如防毒軟體,應用推送等。

使用

Android系統預設在開機之後會發送一個全局的系統廣播,我們可以在這個廣播之上做些文章。

  • 自定義廣播接收者
public class TestBroadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("TestBroadCastReceiver", "onReceive: ");
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Log.i("TestBroadCastReceiver", "Receive ACTION_BOOT_COMPLETED");
        }
    }
}
           
  • 在manifest中添加開機啟動權限

注意:

權限一定要加,一定要加,一定要加!

  • 在manifest中注冊該廣播接收者
<receiver android:name=".TestBroadCastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
           

經過以上配置之後,啟動應用,重新開機手機,在日志中就可以過濾到代碼中的日志了。

如果以上的操作未能成功,那麼可能有以下原因造成:

  • 應用未啟動,應用安裝之後一定要啟動過,這樣目前應用才可能在系統的開機啟動權限清單内
  • 使用者安裝了防毒軟體、安全管家或系統自帶,這些防毒軟體或安全管家禁止掉了應用的開機啟動權限。這種情況下,在手機設定應用管理中看到目前應用是已經獲得了開機啟動權限,但是上述log無法過濾到。這是一個很重要的原因。

    小米,vivo,酷派手機等都是這個原因

  • 手機系統管理—應用管理,開機啟動權限被關閉

進階

我們在上述部分講的是開機啟動廣播,我們目前隻是在接收到廣播之後做了日志的列印。我們還可以在廣播中做很多事情,但是由于廣播的生命周期較短,如果我們需要做耗時操作,我們可以在廣播中啟動服務,在服務中做我們需要做的操作。