-
声明权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-
声明接收者 <receiver android:name=".BootCompletedReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
-
接收者实现类 class BootCompletedReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
startApp(context)
Log.i("ABCD", "系统启动完成")
}
}
private fun startApp(context: Context) {
val appContext = context.applicationContext
val intent = Intent(appContext, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
appContext.startActivity(intent)
}
}
完整示例代码:https://gitee.com/daizhufei/receive-boot-complete.git ,在公司的Android 7.1.1的手机试验,能成功监听到系统启动,并完成App的自动启动。需要注意的是,应用安装后,如果一次都没有启动过,关机重启后是监听不到系统启动事件的,必须手动启动过app之后,以后再启动系统时就可以监听到了。 -
不知道从哪个版本开始,虽然声明了监听开机启动的权限,但是安装后默认是没有此权限的,需要手动到设置中打开此权限,而且这个权限不在权限列表里面显示,单独放在一个地方进行开机启动的设置。如下(小米6 Android 9): 如上图红色框为开机启动开关,默认都是关的,需要手动打开才能监听到开机启动,在小米6 Android 9实验时,发现还要同时开启另一个权限“允许应用在后台弹出界面”,如下: 在小米11 pro Android 11中测试时,一样的设置,发现可以监听到系统启动,但是无法打开Activity。
在oppo A55 5G Android 11中,怎么设置都监听不到系统启动,实验时是使用目标版本为Android 11,不知道把目标版本设置低一些是否有影响。
- 如果是一个无启动Activity的应用,虽然也声明了相应的权限的接收者,但是无法接收到系统的启动。在公司Android 7.1.1的手机上试验的。即声明有Activity,但是没声明有启动类型的Activity就无法接收系统启动。
|