1. 程式人生 > >Android應用如何開機自啟動、自啟動失敗原因

Android應用如何開機自啟動、自啟動失敗原因

From: http://www.trinea.cn/android/android-boot_completed-not-work/

本文主要介紹Android應用如何開機自啟動、自啟動失敗的原因、adb命令傳送BOOT_COMPLETED
問題:應用程式是否可以在安裝後自啟動,沒有ui的純service應用如何啟動?答案馬上揭曉^_*
1、Android應用如何開機自啟動
(1)、在AndroidManifest.xml中註冊

AndroidManifest.xml中註冊BOOT_COMPLETED Action

注意不僅要新增android.intent.action.BOOT_COMPLETED對應的action,還需要新增對應的uses-permission

(2)、Receiver接收廣播進行處理

Java
1234567891011121314publicclassBootBroadcastReceiverextendsBroadcastReceiver{publicstaticfinalStringTAG="BootBroadcastReceiver";@OverridepublicvoidonReceive(Context context,Intent intent){Stringaction=intent.getAction().toString();if(action.equals(Intent.ACTION_BOOT_COMPLETED
)){// u can start your service hereToast.makeText(context,"boot completed action has got",Toast.LENGTH_LONG).show();return;}}}

2、自啟動失敗的原因
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對應的action和uses-permission沒有一起新增
(2)、應用安裝到了sd卡內,安裝在sd卡內的應用是收不到BOOT_COMPLETED廣播的
(3)、系統開啟了Fast Boot模式,這種模式下系統啟動並不會傳送BOOT_COMPLETED廣播
(4)、應用程式安裝後重來沒有啟動過,這種情況下應用程式接收不到任何廣播

,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。
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