第一步:創(chuàng)建廣播接收者
首先創(chuàng)建一個廣播接收者,重構(gòu)其抽象方法 onReceive(Context context, Intent intent)冠息,在其中啟動你想要啟動的Service或app截汪。
import android.content.BroadcastReceiver;????
import android.content.Context; import android.content.Intent;
import android.util.Log;??
public class BootBroadcastReceiver extends BroadcastReceiver
{?
??????? //重寫onReceive方法 @Override
????? ?public void onReceive(Context context, Intent intent) 咖驮、
????? {
??????????? //后邊的XXX.class就是要啟動的服務(wù)
??????????? Intent service = new Intent(context,XXXclass);
??????????? context.startService(service);
??????????? Log.v("TAG", "開機自動服務(wù)自動啟動....."); //啟動應(yīng)用番捂,參數(shù)為需要自動啟動的應(yīng)用的包名
???????? ?? Intent intent = getPackageManager().getLaunchIntentForPackage(packageName); ???????????? context.startActivity(intent );
????????}
}
第二步:配置xml文件,在receiver接收這種添加intent-filter配置
<receiver android:name="BootBroadcastReceiver">??
??????????<intent-filter>??
??????????????????<action android:name="android.intent.action.BOOT_COMPLETED"></action>??
??????????????????<category android:name="android.intent.category.LAUNCHER" />????????????</intent-filter>???????????????????????????????????????????????????????????????????????????????????????????????????????????????? </receiver>?
第三步:添加權(quán)限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
失敗原因分析: 接收不到BOOT_COMPLETED廣播可能的原因
(1)鳄哭、BOOT_COMPLETED對應(yīng)的action和uses-permission沒有一起添加
(2)柒莉、應(yīng)用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應(yīng)用是收不到BOOT_COMPLETED廣播的
(3)尘吗、系統(tǒng)開啟了Fast Boot模式乐纸,這種模式下系統(tǒng)啟動并不會發(fā)送BOOT_COMPLETED廣播
?(4)、應(yīng)用程序安裝后重來沒有啟動過摇予,這種情況下應(yīng)用程序接收不到任何廣播汽绢,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED侧戴、CONNECTIVITY_ACTION等等宁昭。
Android3.1之后,系統(tǒng)為了加強了安全性控制酗宋,應(yīng)用程序安裝后或是(設(shè)置)應(yīng)用管理中被強制關(guān)閉后處于stopped狀態(tài)积仗,在這種狀態(tài)下接收不到任何廣播。直到被啟動過(用戶打開或是其他應(yīng)用調(diào)用)才會脫離這種狀態(tài)蜕猫,所以Android3.1之后
(1)寂曹、應(yīng)用程序無法在安裝后自己啟動
(2)、沒有ui的程序必須通過其他應(yīng)用激活才能啟動回右,如它的Activity隆圆、Service、Content Provider被其他應(yīng)用調(diào)用翔烁。 存在一種例外渺氧,就是應(yīng)用程序被adb push you.apk /system/app/下是會自動啟動的,不處于stopped狀態(tài)蹬屹。
具體說明見:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols http://commonsware.com/blog/2011/07/13/boot-completed-regression-confirmed.html
(3)侣背、adb發(fā)送BOOT_COMPLETED
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
發(fā)送BOOT_COMPLETED廣播,而不用重啟測試機或模擬器來測試BOOT_COMPLETED廣播慨默,
這條命令可以更精確的發(fā)送到某個package贩耐,如下:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n package_name/class_name