Android开机自启动应用

万事须己运,他得非我贤。这篇文章主要讲述Android开机自启动应用相关的知识,希望能为你提供帮助。
问题场景
最近开发一个展示类应用项目,展示设备为若干个24小时运行的android广告机。考虑到停电的情况该应用需要开机自启动。
背景知识

  • 当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED。
  • android开发中的基本概念:Activity。Activity简单的理解为android的视图,承载着android的人机交互。一个应用程序可以有多个Activity,其中有一个Activity为应用程序启动时最先启动的。 该Activity在AndroidManifest.xml中的具体形式如下。intent-filter中两项android.intent.action.MAIN  和  android.intent.category.LAUNCHER表示该activity为应用程序启动主界面
到这里解决问题的思路就完整了,我们监听ACTION_BOOT_COMPLETED广播,并在监听逻辑中启动应用的对应的Main Activity。
方案:
  • AndroidMainfest.xml中添加开机启动权限
    < uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

  • 创建一个广播接收类
package io.dcloud.yourapp; //要修改成工程的包名 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import io.dcloud.PandoraEntry; //H5+SDKpublic class BootBroadcastReceiver extends BroadcastReceiver {static final String action_boot="android.intent.action.BOOT_COMPLETED"; @Override public void onReceive(Context context, Intent intent) {if (intent.getAction().equals(action_boot)){// 注意H5+SDK的Main Activity为PandoraEntry(见AndroidMainfest.xml) Intent bootMainIntent = new Intent(context, PandoraEntry.class); // 这里必须为FLAG_ACTIVITY_NEW_TASK bootMainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(bootMainIntent); }} }

  • 在AndroidMainfest.xml中注册该广播接收类
    < !--开机自启动--> < receiver android:name=".BootBroadcastReceiver"> < intent-filter> < action android:name="android.intent.action.BOOT_COMPLETED" /> < category android:name="android.intent.category.LAUNCHER"> < /category> < /intent-filter> < /receiver>

     
注意事项
  • 请注意BootBroadcastReceiver的命名空间,要保证AndroidMainfest.xml中receiver可以找的到我们创建的BootBroadcastReceiver类。
  • 应用程序必须在Android中启动一次,下次才可以开机启动。
 
原文地址:https://ask.dcloud.net.cn/article/id-689__page-2
 
下面是我写的代码。使用H5+SDK离线打包,在Android一体机中实验成功。
【Android开机自启动应用】AndroidMainfest.xml完整配置
< uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

< application android:name="io.dcloud.application.DCloudApplication" android:allowClearUserData="https://www.songbingjia.com/android/true" android:exported="true" android:icon="@drawable/icon" android:label="@string/app_name" android:largeHeap="true"> < activity android:name="io.dcloud.PandoraEntry" android:configChanges="orientation|keyboardHidden|keyboard|navigation" android:label="@string/app_name" android:launchMode="singleTask" android:hardwareAccelerated="true" android:theme="@style/TranslucentTheme" android:screenOrientation="user" android:windowSoftInputMode="adjustResize" > < intent-filter> < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < !--开机自启动-->

< receiver android:name=".BootBroadcastReceiver"> < intent-filter> < action android:name="android.intent.action.BOOT_COMPLETED" /> < category android:name="android.intent.category.LAUNCHER"> < /category> < /intent-filter> < /receiver>

< /application>

 

    推荐阅读