Android 11设备App配置开机自启不生效问题求助
Android 11设备开机自启失败修复方案
你已正确声明RECEIVE_BOOT_COMPLETED权限,自启失败由代码配置错误、系统版本限制、三星设备定制规则共同导致,逐一修复即可:
1. 修复广播接收器配置错误
你当前接收器的android:exported属性设置为false,该属性控制组件是否能接收外部来源发送的广播:BOOT_COMPLETED是系统进程发送的广播,exported=false时接收器只会响应App内部发出的广播,完全无法收到系统开机广播,必须改为true。
另外你声明的快速开机action存在拼写错误,多写了一个点,正确值是android.intent.action.QUICKBOOT_POWERON。针对三星设备还可以补充专属的开机广播action,提升适配成功率。
修正后的接收器配置如下:
<receiver android:name=".StartOnBootupReceiver" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <!-- 三星设备专属开机广播适配 --> <action android:name="com.sec.android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
2. 适配Android 11后台启动Activity限制
Android 10及以上版本默认禁止后台进程直接启动Activity,你在广播接收器里直接调用startActivity会被系统拦截,需要给Intent添加对应启动flag,修正后的广播接收器代码如下:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; public class StartOnBootupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_BOOT_COMPLETED.equals(action) || Intent.ACTION_QUICKBOOT_POWERON.equals(action)) { Intent activityIntent = new Intent(context, MainActivity.class); activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); } context.startActivity(activityIntent); } } }
3. 三星One UI系统权限设置
Galaxy Tab A7 Lite搭载的One UI系统自带自启动管控机制,默认禁用所有第三方App的开机自启权限,代码配置完成后必须手动开启对应开关:
- 打开系统设置,进入应用列表找到你的App
- 进入「电池」设置页,打开「允许自启动」「允许后台活动」选项
- 进入系统「电池和设备维护」-「电池」-「后台使用限制」页面,将你的App加入「不受限应用」名单
验证注意事项
- App必须安装在设备内部存储,安装到SD卡时无法接收开机广播
- App安装完成后至少手动启动一次,系统才会将其加入开机广播的接收白名单,未启动过的新安装App默认无法接收
BOOT_COMPLETED广播 - 测试时建议使用正式签名的安装包,Android Studio开发模式下直接部署的App可能存在权限状态异常的问题,影响测试结果
内容的提问来源于stack exchange,提问作者garrettb
相关产品推荐
相关产品推荐

