實(shí)現(xiàn)BroadcastReceiver
首先實(shí)現(xiàn)一個(gè)BroadcastReceiver,該廣播接收者監(jiān)聽(tīng)"android.intent.action.BOOT_COMPLETED"廣播剧董,當(dāng)接收到該廣播時(shí),打開(kāi)該應(yīng)用的啟動(dòng)頁(yè)面豆巨。
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent toIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
context.startActivity(toIntent);
}
}
}
在Manifest中聲明該廣播接收者
需要注意的是該廣播接收者只能在Manifest中聲明松却,而不能在代碼中啟動(dòng)沫浆,否則無(wú)法接收到開(kāi)機(jī)廣播。
<receiver android:name=".base.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
聲明權(quán)限
最后別忘了在Manifest中聲明接收開(kāi)機(jī)廣播的權(quán)限洲尊,很多人都忘了這一步远豺,導(dǎo)致無(wú)法接收到廣播
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
無(wú)法接收到廣播
這里列舉下一些常見(jiàn)的無(wú)法接收到開(kāi)機(jī)廣播的原因:
未添加權(quán)限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>。
被系統(tǒng)自帶或360手機(jī)助手等攔截坞嘀,需在權(quán)限管理設(shè)置里放開(kāi)開(kāi)機(jī)自啟動(dòng)的權(quán)限躯护。
應(yīng)用安裝到sd卡上,安裝在sd卡上的應(yīng)用是收不到BOOT_COMPLETED廣播的丽涩。
系統(tǒng)開(kāi)啟了Fast Boot模式棺滞,這種模式下系統(tǒng)啟動(dòng)并不會(huì)發(fā)送BOOT_COMPLETED廣播裁蚁。
應(yīng)用程序安裝后重來(lái)沒(méi)有啟動(dòng)過(guò),這種情況下應(yīng)用程序接收不到任何廣播继准。