Android 開機(jī)自啟動(dòng)service實(shí)踐

Android 設(shè)備啟動(dòng)的時(shí)候,會(huì)發(fā)送android.intent.action.BOOT_COMPLETED的廣播,監(jiān)聽這個(gè)廣播來實(shí)現(xiàn)開機(jī)自啟動(dòng)。

開機(jī)自啟動(dòng)service 的實(shí)現(xiàn)步驟

1) 創(chuàng)建需要的service和 BroadcastReceiver
2) 在AndroidManifest.xml 注冊service 和BroadcastReceiver

       <service android:name=".MyService"
           android:enabled="true"
           android:exported="true" />
       <receiver
           android:name=".sheyi.proinfo.utils.BootReceiver"
           android:enabled="true"
           android:exported="true">
           <intent-filter>
               <action android:name="android.intent.action.BOOT_COMPLETED" />
               <action android:name="com.tencent.yishe.destroy" />//這個(gè)就是自定義的action
           </intent-filter>
      </receiver>

3)申明權(quán)限
```
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

4) 在BroadcastReceiver 啟動(dòng)服務(wù)
 if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")){
        Log.d("BootReceiver", "system boot completed");
        Intent service = new Intent(context, MyService.class);
        context.startService(service);
       // 啟動(dòng)activity
     /* Intent mainActivityIntent = new Intent(context, MainActivity.class);  // 要啟動(dòng)的Activity
        mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(mainActivityIntent); */

}

####坑
 實(shí)踐發(fā)現(xiàn)通過以上方式是現(xiàn)實(shí)的開機(jī)自啟動(dòng)服務(wù)在開機(jī)后并沒有自動(dòng)運(yùn)行。原因是在Android3.1之后,系統(tǒng)為了加強(qiáng)了安全性控制,應(yīng)用程序安裝后或是(設(shè)置)應(yīng)用管理中被強(qiáng)制關(guān)閉后處于stopped狀態(tài),在這種狀態(tài)下接收不到任何廣播。對(duì)于android3.1以后版本,如果要應(yīng)用接收開機(jī)廣播有兩種方法:
  a).將應(yīng)用預(yù)置到/system/app/目錄。
  b).安裝應(yīng)用后先啟動(dòng)一次。

*自啟動(dòng)失敗的原因
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對(duì)應(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)啟動(dòng)并不會(huì)發(fā)送BOOT_COMPLETED廣播
(4)、應(yīng)用程序安裝后重來沒有啟動(dòng)過,這種情況下應(yīng)用程序接收不到任何廣播,包括BOOT_COMPLETED
*
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容