Android 設(shè)備啟動(dòng)的時(shí)候,會(huì)發(fā)送android.intent.action.BOOT_COMPLETED的廣播,監(jiān)聽這個(gè)廣播來實(shí)現(xiàn)開機(jī)自啟動(dòng)。
在嘉黎等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè),嘉黎網(wǎng)站建設(shè)費(fèi)用合理。
1) 創(chuàng)建需要的service和 BroadcastReceiver
2) 在AndroidManifest.xml 注冊(cè)service 和BroadcastReceiver
3)申明權(quán)限
```
uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/
}
article class="_2rhmJa"
Android 設(shè)備開機(jī)自啟動(dòng)的可以用廣播實(shí)現(xiàn),因?yàn)?Android 設(shè)備開機(jī)時(shí)會(huì)發(fā)送一條開機(jī)廣播 "android.intent.action.BOOT_COMPLETED"。接收后實(shí)現(xiàn)啟動(dòng)就完成了。
接下來是準(zhǔn)備工作
如果按照上面的全部步驟后操作后,重啟沒有自動(dòng)啟動(dòng)程序,怎么辦呢?是怎么回事呢?
*那么首先請(qǐng)檢查一下你的手機(jī)是不是安裝了360等安全助手之類的軟件,如果有,請(qǐng)?jiān)谲浖淖詥?dòng)軟件管理中將app設(shè)置為允許
*我的手機(jī)沒有安裝這些軟件,但是手機(jī)中自帶了安全助手,有的手機(jī)系統(tǒng)設(shè)置里面自帶了自啟動(dòng)軟件管理的功能 ,所以在這里將我們的app設(shè)置為允許開機(jī)啟動(dòng)),重啟手機(jī),測(cè)試是否成功。
然而并沒有成功
接收不到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、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等。
Android3.1之后,系統(tǒng)為了加強(qiáng)了安全性控制,應(yīng)用程序安裝后或是(設(shè)置)應(yīng)用管理中被強(qiáng)制關(guān)閉后處于stopped狀態(tài),在這種狀態(tài)下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標(biāo)志,而默認(rèn)所有系統(tǒng)廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統(tǒng)廣播自啟動(dòng)了。所以Android3.1之后
(1)、應(yīng)用程序無法在安裝后自己?jiǎn)?dòng)
(2)、沒有ui的程序必須通過其他應(yīng)用激活才能啟動(dòng),如它的Activity、Service、Content Provider被其他應(yīng)用調(diào)用。
存在一種例外,就是應(yīng)用程序被adb push you.apk /system/app/下是會(huì)自動(dòng)啟動(dòng)的,不處于stopped狀態(tài)。
并不太懂 我的APP啟動(dòng)后 已經(jīng)收到廣播
第一種方式 我再模擬器上 測(cè)試 可以 android 9.0版本
桌面設(shè)置也會(huì)把你的app當(dāng)成一個(gè)桌面主題,還有一個(gè)選項(xiàng)是系統(tǒng)桌面,你需要設(shè)置成自己的app
如果找不到桌面設(shè)置選項(xiàng),可以從手機(jī)設(shè)置–應(yīng)用程序-查看所有應(yīng)用程序(包括系統(tǒng)的應(yīng)用程序),找到桌面程序之類的字眼的應(yīng)用,清楚其默認(rèn)設(shè)置。
前段時(shí)間在做智能機(jī)器人等定制android系統(tǒng)開發(fā)的應(yīng)用,因?yàn)闄C(jī)器人定制應(yīng)用,需要在系統(tǒng)啟動(dòng)的時(shí)候就運(yùn)行程序,不需要展示系統(tǒng)桌面,這里需要用到系統(tǒng)開機(jī)應(yīng)用自啟動(dòng),也就是常說的開機(jī)自啟動(dòng)。
記錄一下實(shí)現(xiàn)流程:
在AndroidManifest.xml文件中配置監(jiān)聽啟動(dòng)權(quán)限
新建一個(gè)監(jiān)聽廣播接收者BootReceiver
安裝app到手機(jī)上,然后啟動(dòng)一次程序(據(jù)說安卓4.0以后,必須先啟動(dòng)一次程序才能接收到開機(jī)完成的廣播,目的是防止惡意程序)
如果按照上面的全部步驟后操作后,重啟沒有自動(dòng)啟動(dòng)程序,怎么辦呢?是怎么回事呢?
如果還是失敗,那么請(qǐng)檢查你的手機(jī)是不是設(shè)置了app安裝首選位置是sd卡,據(jù)說安裝到sd卡的話,因?yàn)槭謾C(jī)啟動(dòng)成功后(發(fā)送了啟動(dòng)完成的廣播后)才加載sd卡,所以app接收不到廣播。如果是的話,把a(bǔ)pp安裝到內(nèi)部存儲(chǔ)試試。如果不懂得設(shè)置的話,那么直接在AndroidManifest.xml文件中設(shè)置安裝路徑,在manifest的根節(jié)點(diǎn)中加入 android:installLocation="internalOnly" 。如下:
第一種: 監(jiān)控RECEIVE_BOOT_COMPLETED,即開機(jī)啟動(dòng)事件
第二種: 監(jiān)控sd卡mount事件, 監(jiān)控sd卡事件也有類似開機(jī)啟動(dòng)效果。特別app安裝在sd卡的情況下有些os是抓取不到RECEIVE_BOOT_COMPLETED
第三種: android:installLocation="internalOnly", 限制app的安裝位置,使其能抓取到RECEIVE_BOOT_COMPLETED
第四種: 監(jiān)聽電話或者短信事件。