android開(kāi)機(jī)自動(dòng)啟動(dòng)app的解決方法
經(jīng)過(guò)多次嘗試之后,終于找到了開(kāi)機(jī)自動(dòng)啟動(dòng)App的解決方法
開(kāi)機(jī)后會(huì)停留在鎖屏頁(yè)面,且短時(shí)間內(nèi)如果沒(méi)有進(jìn)行解鎖操作,屏幕會(huì)進(jìn)入休眠狀態(tài),所以啟動(dòng)APP時(shí)需要先喚醒屏幕和解鎖屏幕
定義一個(gè)廣播類BootBroadcastReceiver.java
public class BootBroadcastReceiver extends BroadcastReceiver { ? ? static final String ACTION = "android.intent.action.BOOT_COMPLETED"; ? ? @Override ? ? public void onReceive(Context context, Intent intent) { ? ? ? ? //屏幕喚醒 ? ? ? ? PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); ? ? ? ? PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP ? ? ? ? ? ? ? ? | PowerManager.SCREEN_DIM_WAKE_LOCK, "BootBroadcastReceiver"); ? ? ? ? wl.acquire(); ? ? ? ? //屏幕解鎖 ? ? ? ? KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); ? ? ? ? KeyguardManager.KeyguardLock kl = km.newKeyguardLock("BootBroadcastReceiver"); ? ? ? ? kl.disableKeyguard(); ? ? ? ? //啟動(dòng)APP ? ? ? ? if (intent.getAction().equals(ACTION)) { ? ? ? ? ? ? Intent intent = new Intent(context, LaunchActivity.class); ?// 要啟動(dòng)的Activity ? ? ? ? ? ? if (!(context instanceof Activity)) { ? ? ? ? ? ? ? ? //如果不是在Activity中顯示Activity,必須要設(shè)置FLAG_ACTIVITY_NEW_TASK標(biāo)志 ? ? ? ? ? ? ? ? intent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ? ? ? ? ? ? } ? ? ? ? ? ? context.startActivity(intent ); ? ? ? ? } ? ? } } ?
AndroidManifest.xml文件
1.添加權(quán)限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
2.注冊(cè)廣播
<receiver ? ? ?android:name=".receiver.BootBroadcastReceiver" ? ? ?android:enabled="true" ? ? ?android:exported="true" ? ? ?android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> ? ? ?<intent-filter> ? ? ? ? ? <action android:name="android.intent.action.BOOT_COMPLETED"/> ? ? ? ? ? <action android:name="android.intent.action.QUICKBOOT_POWERON"/> ? ? ? ? ? <category android:name="android.intent.category.DEFAULT"/> ? ? ? </intent-filter> </receiver>
注:intent-filter中的action要與BootBroadcastReceiver中定義的action相對(duì)應(yīng)
在解決開(kāi)機(jī)自啟的問(wèn)題時(shí)發(fā)現(xiàn)了一篇文章記錄了自啟動(dòng)失敗的原因,在這里mark一下
自啟動(dòng)失敗的原因
接收不到BOOT_COMPLETED廣播可能的原因
1.BOOT_COMPLETED對(duì)應(yīng)的action和uses-permission(”android.permission.RECEIVE_BOOT_COMPLETED” )沒(méi)有一起添加
2.應(yīng)用安裝到了sd卡內(nèi),安裝在sd卡內(nèi)的應(yīng)用是收不到BOOT_COMPLETED廣播的,可以在manifest節(jié)點(diǎn)下添加android:installLocation=”internalOnly”來(lái)指定只能安裝在手機(jī)內(nèi)存里面,也可以監(jiān)聽(tīng)開(kāi)機(jī)加載sd卡的廣播,可惜有的手機(jī)是沒(méi)有sd卡的
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等等
5.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)用。
6.存在一種例外,就是應(yīng)用程序被adb push you.apk /system/app/下是會(huì)自動(dòng)啟動(dòng)的,不處于stopped狀態(tài)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 使用ViewPager實(shí)現(xiàn)圖片左右循環(huán)滑動(dòng)自動(dòng)播放
這篇文章主要介紹了Android 使用ViewPager實(shí)現(xiàn)圖片左右循環(huán)滑動(dòng)自動(dòng)播放的相關(guān)資料,非常不錯(cuò),具有參考解決價(jià)值,需要的朋友可以參考下2016-08-08android判斷手機(jī)是否安裝地圖應(yīng)用實(shí)現(xiàn)跳轉(zhuǎn)到該地圖應(yīng)用
這篇文章主要給大家介紹了android如何判斷手機(jī)是否安裝地圖應(yīng)用,并實(shí)現(xiàn)跳轉(zhuǎn)到該地圖應(yīng)用的方法,需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01Android檢測(cè)url地址是否可達(dá)的兩種方法
今天小編就為大家分享一篇Android檢測(cè)url地址是否可達(dá)的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Android給TextView添加點(diǎn)擊事件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Android給TextView添加點(diǎn)擊事件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12Android7.0版本影響開(kāi)發(fā)的改進(jìn)分析
這篇文章主要介紹了Android7.0版本影響開(kāi)發(fā)的改進(jìn),總結(jié)分析了Android7.0版本中比較常見(jiàn)的開(kāi)發(fā)注意事項(xiàng)與操作技巧,需要的朋友可以參考下2017-11-11Android UI設(shè)計(jì)系列之自定義ListView仿QQ空間阻尼下拉刷新和漸變菜單欄效果(8)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義ListView仿QQ空間阻尼下拉刷新和漸變菜單欄效果,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android應(yīng)用開(kāi)發(fā)中數(shù)據(jù)的保存方式總結(jié)
這篇文章主要介紹了Android應(yīng)用開(kāi)發(fā)中數(shù)據(jù)的保存方式總結(jié),包括對(duì)ROM、SD卡、SharedPreference這三種方式實(shí)現(xiàn)的核心代碼的精選,需要的朋友可以參考下2016-02-02