日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

android開機自動啟動app的解決方法_Android

作者:L__JIAMING ? 更新時間: 2022-07-09 編程語言

經過多次嘗試之后,終于找到了開機自動啟動App的解決方法

開機后會停留在鎖屏頁面,且短時間內如果沒有進行解鎖操作,屏幕會進入休眠狀態,所以啟動APP時需要先喚醒屏幕和解鎖屏幕

定義一個廣播類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();

? ? ? ? //啟動APP
? ? ? ? if (intent.getAction().equals(ACTION)) {
? ? ? ? ? ? Intent intent = new Intent(context, LaunchActivity.class); ?// 要啟動的Activity
? ? ? ? ? ? if (!(context instanceof Activity)) {
? ? ? ? ? ? ? ? //如果不是在Activity中顯示Activity,必須要設置FLAG_ACTIVITY_NEW_TASK標志
? ? ? ? ? ? ? ? intent .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
? ? ? ? ? ? }
? ? ? ? ? ? context.startActivity(intent );
? ? ? ? }
? ? }

} ?

AndroidManifest.xml文件

1.添加權限

<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.注冊廣播

<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相對應

在解決開機自啟的問題時發現了一篇文章記錄了自啟動失敗的原因,在這里mark一下

自啟動失敗的原因

接收不到BOOT_COMPLETED廣播可能的原因

1.BOOT_COMPLETED對應的action和uses-permission(”android.permission.RECEIVE_BOOT_COMPLETED” )沒有一起添加

2.應用安裝到了sd卡內,安裝在sd卡內的應用是收不到BOOT_COMPLETED廣播的,可以在manifest節點下添加android:installLocation=”internalOnly”來指定只能安裝在手機內存里面,也可以監聽開機加載sd卡的廣播,可惜有的手機是沒有sd卡的

3.系統開啟了Fast Boot模式,這種模式下系統啟動并不會發送BOOT_COMPLETED廣播

4.應用程序安裝后重來沒有啟動過,這種情況下應用程序接收不到任何廣播,包括BOOT_COMPLETED、ACTION_PACKAGE_ADDED、CONNECTIVITY_ACTION等等

5.Android3.1之后,系統為了加強了安全性控制,應用程序安裝后或是(設置)應用管理中被強制關閉后處于stopped狀態,在這種狀態下接收不到任何廣播,除非廣播帶有FLAG_INCLUDE_STOPPED_PACKAGES標志,而默認所有系統廣播都是FLAG_EXCLUDE_STOPPED_PACKAGES的,所以就沒法通過系統廣播自啟動了。所以Android3.1之后
(1)、應用程序無法在安裝后自己啟動
(2)、沒有ui的程序必須通過其他應用激活才能啟動,如它的Activity、Service、Content Provider被其他應用調用。

6.存在一種例外,就是應用程序被adb push you.apk /system/app/下是會自動啟動的,不處于stopped狀態

原文鏈接:https://blog.csdn.net/sinat_25112321/article/details/80104714

欄目分類
最近更新