android - 设备完成重启过程后如何启动我的应用程序?
问题描述
我创建了一个应用程序,我想在设备重启后打开它我正在使用广播接收器但无法正常工作,我该怎么办,任何替代解决方案。
我也在 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>
解决方案
起初这条线总是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
从广播开始,查看文档
简单,但恕我直言丑陋的解决方法是添加下一个权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
授予此权限后,您Activity
还将从 API 29+ 开始
推荐阅读
- java - Apollo Java GraphQL 客户端:generateApolloSources 失败
- javascript - Angular 在使用计时器时看不到变量值
- java - 从文件中检索的字符串内容在连接或相等检查期间消失
- java - Java ProcessBuilder 无法启动 GNU 屏幕
- c - CS50 的拼写器无法处理最基本的单词
- devops - artifactory.service 的作业失败
- reactjs - 如何使用 SPFx 中的 React 挂钩从孙组件强制刷新 GrandParent 组件
- .net - 表单识别器 API | 从 11.05.2020 开始修复 | 带有空字段的客户赞美结果
- r - (为什么)来自 nnet::multinom 尺度的标准误差是依赖的?
- google-maps - 谷歌的查询和地方自动完成之间的区别?