article class="_2rhmJa"
成都創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計開發(fā)服務(wù)!
Android 設(shè)備開機(jī)自啟動的可以用廣播實(shí)現(xiàn),因?yàn)?Android 設(shè)備開機(jī)時會發(fā)送一條開機(jī)廣播 "android.intent.action.BOOT_COMPLETED"。接收后實(shí)現(xiàn)啟動就完成了。
接下來是準(zhǔn)備工作
如果按照上面的全部步驟后操作后,重啟沒有自動啟動程序,怎么辦呢?是怎么回事呢?
*那么首先請檢查一下你的手機(jī)是不是安裝了360等安全助手之類的軟件,如果有,請在軟件的自啟動軟件管理中將app設(shè)置為允許
*我的手機(jī)沒有安裝這些軟件,但是手機(jī)中自帶了安全助手,有的手機(jī)系統(tǒng)設(shè)置里面自帶了自啟動軟件管理的功能 ,所以在這里將我們的app設(shè)置為允許開機(jī)啟動),重啟手機(jī),測試是否成功。
然而并沒有成功
接收不到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)為了加強(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)廣播自啟動了。所以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)。
并不太懂 我的APP啟動后 已經(jīng)收到廣播
第一種方式 我再模擬器上 測試 可以 android 9.0版本
桌面設(shè)置也會把你的app當(dāng)成一個桌面主題,還有一個選項(xiàng)是系統(tǒng)桌面,你需要設(shè)置成自己的app
如果找不到桌面設(shè)置選項(xiàng),可以從手機(jī)設(shè)置–應(yīng)用程序-查看所有應(yīng)用程序(包括系統(tǒng)的應(yīng)用程序),找到桌面程序之類的字眼的應(yīng)用,清楚其默認(rèn)設(shè)置。
方法/步驟
首先點(diǎn)按手機(jī)界面的設(shè)置標(biāo)志
如果沒有將設(shè)置圖標(biāo)放置在手機(jī)界面 可以點(diǎn)按手機(jī)界面上方向下拖動 然后點(diǎn)按下圖中箭頭指向的設(shè)置按鈕
進(jìn)入設(shè)置界面之后點(diǎn)按界面右上角的全部設(shè)置按鈕 然后向上拖動界面
找到權(quán)限管理按鈕 點(diǎn)按該按鈕
在權(quán)限中點(diǎn)按開機(jī)自動啟動
此時將出現(xiàn)手機(jī)中的所用應(yīng)用app列表 如果點(diǎn)按某應(yīng)用后面的灰色的開關(guān) 點(diǎn)按之后該開關(guān)將顯示為藍(lán)色的打開狀態(tài) 那么此時該應(yīng)用將會在手機(jī)開機(jī)時自動啟動
點(diǎn)按界面下方的菜單按鈕 將彈出快捷菜單 可以點(diǎn)按全部允許從而讓所有的app都自動啟動 或者點(diǎn)按全部禁止 這樣設(shè)置可以讓全部app在手機(jī)開機(jī)后都不能自動啟動
第一種: 監(jiān)控RECEIVE_BOOT_COMPLETED,即開機(jī)啟動事件
第二種: 監(jiān)控sd卡mount事件, 監(jiān)控sd卡事件也有類似開機(jī)啟動效果。特別app安裝在sd卡的情況下有些os是抓取不到RECEIVE_BOOT_COMPLETED
第三種: android:installLocation="internalOnly", 限制app的安裝位置,使其能抓取到RECEIVE_BOOT_COMPLETED
第四種: 監(jiān)聽電話或者短信事件。
安裝自啟動:
要做這個功能有一個前提,那就是用戶的機(jī)器上已經(jīng)裝過相應(yīng)應(yīng)用,也就是說只有升級APK的時候才可以這么干,因?yàn)橐獔?zhí)行的功能需要程序的配合。
具體步驟如下:
首先要知道程序已經(jīng)安裝完成,所以需要在程序中注冊一個廣播監(jiān)聽(必須是靜態(tài)的,你懂的)apk安裝完成的action:"android.intent.action.PACKAGE_ADDED",在這個廣播的onReceive方法中監(jiān)聽action,并通過intent.getDataString()方法判斷安裝程序的包名是否屬于自己的包名,如果是做下一步操作;
通過Intent顯式或者隱式的啟動你自己的程序。
建議:
??最好不要這樣干,你要考慮一下用戶的感受,特別是那種自動安裝不需要點(diǎn)確認(rèn)的時候,正在玩游戲、看視頻、看小說、用微信你自動打開一個應(yīng)用
開機(jī)自啟動
android實(shí)現(xiàn)開機(jī)自啟動可能是移動操作系統(tǒng)中最簡單的了,只需要監(jiān)聽一個開機(jī)啟動的Broadcast(廣播)即可。首先寫一個Receiver(即廣播監(jiān)聽器),繼承BroadcastReceiver。
如下所示:
public class BootReceiver extends BroadcastReceiver {
private PendingIntent mAlarmSender;
@Override
public void onReceive(Context context, Intent intent) {
// 在這里干你想干的事(啟動一個Service,Activity等),本例是啟動一個定時調(diào)度程序,每30分鐘啟動一個Service去更新數(shù)據(jù)
mAlarmSender = PendingIntent.getService(context, 0, new Intent(context,
RefreshDataService.class), 0);
long firstTime = SystemClock.elapsedRealtime();
AlarmManager am = (AlarmManager) context
.getSystemService(Activity.ALARM_SERVICE);
am.cancel(mAlarmSender);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
30 * 60 * 1000, mAlarmSender);
}
}
接下來,只需要在應(yīng)用程序配置文件AndroidManifest.xml中注冊這個Receiver來監(jiān)聽系統(tǒng)啟動事件即可
如下所示:
receiver android:name=".service.BootReceiver"
intent-filter
!-- 系統(tǒng)啟動完成后會調(diào)用--
action android:name="android.intent.action.BOOT_COMPLETED"
/action
/intent-filter
/receiver
各種以android硬件平臺為基礎(chǔ)的【公示屏】、【廣告屏】等等,雖然很少有升級,但是不可避免的會遇到,而此類APP的使用場景,一般沒人會去幫助你版本更新,點(diǎn)擊安裝,故而需要:靜默安裝。
1、確認(rèn)安裝包是否存在,并可讀寫
2、隱示啟動:action和data的schema來控制彈出安裝工具類APP,然后點(diǎn)擊安裝...
3、升級完:BootReceiver 監(jiān)聽到Intent.ACTION_PACKAGE_REPLACED,然后自啟動
靜默安裝apk接口,無需開放root,也無需system權(quán)限。