Android應用如何開機自啟動、自啟動失敗原因
阿新 • • 發佈:2019-01-26
From: http://www.trinea.cn/android/android-boot_completed-not-work/
本文主要介紹Android應用如何開機自啟動、自啟動失敗的原因、adb命令傳送BOOT_COMPLETED。
問題:應用程式是否可以在安裝後自啟動,沒有ui的純service應用如何啟動?答案馬上揭曉^_*
1、Android應用如何開機自啟動
(1)、在AndroidManifest.xml中註冊
注意不僅要新增android.intent.action.BOOT_COMPLETED對應的action,還需要新增對應的uses-permission
(2)、Receiver接收廣播進行處理
Java1234567891011121314 | publicclassBootBroadcastReceiverextendsBroadcastReceiver{publicstaticfinalStringTAG="BootBroadcastReceiver";@OverridepublicvoidonReceive(Context context,Intent intent){Stringaction=intent.getAction().toString();if(action.equals(Intent.ACTION_BOOT_COMPLETED |
2、自啟動失敗的原因
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對應的action和uses-permission沒有一起新增
(2)、應用安裝到了sd卡內,安裝在sd卡內的應用是收不到BOOT_COMPLETED廣播的
(3)、系統開啟了Fast Boot模式,這種模式下系統啟動並不會傳送BOOT_COMPLETED廣播
(4)、應用程式安裝後重來沒有啟動過,這種情況下應用程式接收不到任何廣播
Android3.1之後,系統為了加強了安全性控制,應用程式安裝後或是(設定)應用管理中被強制關閉後處於stopped狀態,在這種狀態下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標誌,而預設所有系統廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統廣播自啟動了。所以Android3.1之後
(1)、應用程式無法在安裝後自己啟動
(2)、沒有ui的程式必須通過其他應用啟用才能啟動,如它的Activity、Service、Content Provider被其他應用呼叫。
存在一種例外,就是應用程式被adb push you.apk /system/app/下是會自動啟動的,不處於stopped狀態。
(Hansel: 如果是預置的apk也沒有這個限制。)
3、adb傳送BOOT_COMPLETED
我們可以通過
1 | adbshellambroadcast-aandroid.intent.action.BOOT_COMPLETED |
命令傳送BOOT_COMPLETED廣播,而不用重啟測試機或模擬器來測試BOOT_COMPLETED廣播,這條命令可以更精確的傳送到某個package,如下:
1 | adbshellambroadcast-aandroid.intent.action.BOOT_COMPLETED-candroid.intent.category.HOME-npackage_name/class_name |