關(guān)注 【網(wǎng)羅開(kāi)發(fā)】微信公眾號(hào),回復(fù)【160】便可領(lǐng)取。
創(chuàng)新互聯(lián)公司專注于西鄉(xiāng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供西鄉(xiāng)營(yíng)銷型網(wǎng)站建設(shè),西鄉(xiāng)網(wǎng)站制作、西鄉(xiāng)網(wǎng)頁(yè)設(shè)計(jì)、西鄉(xiāng)網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造西鄉(xiāng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供西鄉(xiāng)網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
網(wǎng)羅天下方法,方便你我開(kāi)發(fā) ,更多Android技術(shù)干貨等待領(lǐng)取,所有文檔會(huì)持續(xù)更新,歡迎關(guān)注一起成長(zhǎng)!
總結(jié)一下使用ACTION_BOOT_COMPLETED的廣播,解決app開(kāi)機(jī)自啟動(dòng)的問(wèn)題
1.首先在你的工程上建一個(gè)廣播接受的類,繼承BroadcastReceiver:
2.然后要在AndroidManifest.xml中加入權(quán)限和配置相關(guān)信息:
3.在application標(biāo)簽中,配置以下相關(guān)信息:
補(bǔ)充說(shuō)明:
1.查看系統(tǒng)中是否安裝了類似360管家的軟件,為了加快開(kāi)機(jī)速度,默認(rèn)是關(guān)閉掉開(kāi)機(jī)廣播的,只需要在設(shè)置中打開(kāi)即可。
2.如果監(jiān)聽(tīng)不到廣播,可以嘗試同時(shí)監(jiān)聽(tīng)廣播和sd卡。
3.同時(shí)監(jiān)聽(tīng)廣播和sd卡,在application標(biāo)簽中,配置以下相關(guān)信息:
前段時(shí)間在做智能機(jī)器人等定制android系統(tǒng)開(kāi)發(fā)的應(yīng)用,因?yàn)闄C(jī)器人定制應(yīng)用,需要在系統(tǒng)啟動(dòng)的時(shí)候就運(yùn)行程序,不需要展示系統(tǒng)桌面,這里需要用到系統(tǒng)開(kāi)機(jī)應(yīng)用自啟動(dòng),也就是常說(shuō)的開(kāi)機(jī)自啟動(dòng)。
記錄一下實(shí)現(xiàn)流程:
在AndroidManifest.xml文件中配置監(jiān)聽(tīng)啟動(dòng)權(quán)限
新建一個(gè)監(jiān)聽(tīng)廣播接收者BootReceiver
安裝app到手機(jī)上,然后啟動(dòng)一次程序(據(jù)說(shuō)安卓4.0以后,必須先啟動(dòng)一次程序才能接收到開(kāi)機(jī)完成的廣播,目的是防止惡意程序)
如果按照上面的全部步驟后操作后,重啟沒(méi)有自動(dòng)啟動(dòng)程序,怎么辦呢?是怎么回事呢?
如果還是失敗,那么請(qǐng)檢查你的手機(jī)是不是設(shè)置了app安裝首選位置是sd卡,據(jù)說(shuō)安裝到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" 。如下:
article class="_2rhmJa"
Android 設(shè)備開(kāi)機(jī)自啟動(dòng)的可以用廣播實(shí)現(xiàn),因?yàn)?Android 設(shè)備開(kāi)機(jī)時(shí)會(huì)發(fā)送一條開(kāi)機(jī)廣播 "android.intent.action.BOOT_COMPLETED"。接收后實(shí)現(xiàn)啟動(dòng)就完成了。
接下來(lái)是準(zhǔn)備工作
如果按照上面的全部步驟后操作后,重啟沒(méi)有自動(dòng)啟動(dòng)程序,怎么辦呢?是怎么回事呢?
*那么首先請(qǐng)檢查一下你的手機(jī)是不是安裝了360等安全助手之類的軟件,如果有,請(qǐng)?jiān)谲浖淖詥?dòng)軟件管理中將app設(shè)置為允許
*我的手機(jī)沒(méi)有安裝這些軟件,但是手機(jī)中自帶了安全助手,有的手機(jī)系統(tǒng)設(shè)置里面自帶了自啟動(dòng)軟件管理的功能 ,所以在這里將我們的app設(shè)置為允許開(kāi)機(jī)啟動(dòng)),重啟手機(jī),測(cè)試是否成功。
然而并沒(méi)有成功
接收不到BOOT_COMPLETED廣播可能的原因
(1)、BOOT_COMPLETED對(duì)應(yīng)的action和uses-permission沒(méi)有一起添加
(2)、應(yīng)用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應(yīng)用是收不到BOOT_COMPLETED廣播的
(3)、系統(tǒng)開(kāi)啟了Fast Boot模式,這種模式下系統(tǒng)啟動(dòng)并不會(huì)發(fā)送BOOT_COMPLETED廣播
(4)、應(yīng)用程序安裝后重來(lái)沒(méi)有啟動(dòng)過(guò),這種情況下應(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的,所以就沒(méi)法通過(guò)系統(tǒng)廣播自啟動(dòng)了。所以Android3.1之后
(1)、應(yīng)用程序無(wú)法在安裝后自己?jiǎn)?dòng)
(2)、沒(méi)有ui的程序必須通過(guò)其他應(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è)置。
Android 設(shè)備啟動(dòng)的時(shí)候,會(huì)發(fā)送android.intent.action.BOOT_COMPLETED的廣播,監(jiān)聽(tīng)這個(gè)廣播來(lái)實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)。
1) 創(chuàng)建需要的service和 BroadcastReceiver
2) 在AndroidManifest.xml 注冊(cè)service 和BroadcastReceiver
3)申明權(quán)限
```
uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/
}
第一種: 監(jiān)控RECEIVE_BOOT_COMPLETED,即開(kāi)機(jī)啟動(dòng)事件
第二種: 監(jiān)控sd卡mount事件, 監(jiān)控sd卡事件也有類似開(kāi)機(jī)啟動(dòng)效果。特別app安裝在sd卡的情況下有些os是抓取不到RECEIVE_BOOT_COMPLETED
第三種: android:installLocation="internalOnly", 限制app的安裝位置,使其能抓取到RECEIVE_BOOT_COMPLETED
第四種: 監(jiān)聽(tīng)電話或者短信事件。