设备完成重启过程后如何启动我的应用程序?
Posted
技术标签:
【中文标题】设备完成重启过程后如何启动我的应用程序?【英文标题】:How to start my application after device completing reboot process? 【发布时间】:2021-06-01 18:00:29 【问题描述】:我创建了一个应用程序,我想在设备重启后打开它我正在使用广播接收器但无法正常工作,我该怎么办,任何替代解决方案。
我已经在 5.1 以及 10,11 上测试过
这是我的接收器
package com.activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class StartActivityOnBootReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
if (Intent.ACTION_BOOT_COMPLETED.equals("android.intent.action.BOOT_COMPLETED"))
Intent i = new Intent(context, SplashActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
这是我的清单
<receiver android:name="com.activity.StartActivityOnBootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT"/>
</intent-filter>
</receiver>
【问题讨论】:
你有权限<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
吗?
【参考方案1】:
一开始这条线总是true
if (Intent.ACTION_BOOT_COMPLETED.equals("android.intent.action.BOOT_COMPLETED"))
应该是
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction()))
进一步为接收者添加适当的权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".StartActivityOnBootReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
您也可以尝试将声明的action
s 拆分为三个分开的intent-filter
s,而不是保留一个数组
最后但并非最不重要的一点:启动 Android API 29 您无法从广播中启动 Activity
,请查看 DOCs
简单,但恕我直言丑陋的解决方法是添加下一个权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
您的Activity
也将在 API 29+ 上启动
【讨论】:
以上是关于设备完成重启过程后如何启动我的应用程序?的主要内容,如果未能解决你的问题,请参考以下文章