欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

android開(kāi)機(jī)自動(dòng)啟動(dòng)app的解決方法

 更新時(shí)間:2022年05月17日 08:26:08   作者:L__JIAMING  
這篇文章主要為大家詳細(xì)介紹了android開(kāi)機(jī)自動(dòng)啟動(dòng)app的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

經(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)文章

最新評(píng)論