Android10 OPPO设备无法接收BOOT_COMPLETED开机广播问题求助
解决方案
1. 首先补全缺失的权限声明
你当前的Manifest文件遗漏了接收开机广播的必要权限,在<application>标签外层添加以下权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2. 适配OPPO ColorOS的定制权限限制
OPPO的定制系统默认禁止所有第三方应用自启动,即使你声明了对应权限也无法接收开机广播,需要引导用户手动开启权限:
- 打开系统「设置」- 「应用管理」- 找到你开发的应用
- 进入「耗电管理」/「自启动管理」页面
- 开启允许应用自启动、允许关联启动、允许后台活动三个开关
3. 代码优化建议
3.1 移除不必要的Intent过滤规则
BOOT_COMPLETED广播不需要添加android.intent.category.DEFAULT类别,你可以直接移除Receiver的intent-filter中的这行配置,避免过滤规则冲突:
<!-- 删除这行 --> <category android:name="android.intent.category.DEFAULT"/>
3.2 广播接收逻辑加空校验
避免Intent为空导致崩溃,修改onReceive逻辑:
@Override public void onReceive(Context context, Intent intent) { Log.e("MyApp", " Boot completed fired"); // 先判空再取action if (intent != null && Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { Log.e("MyApp", "matches intent"); Toast.makeText(context, "fired ", Toast.LENGTH_LONG).show(); } }
补充说明
你遇到的重启后必须手动打开应用才能收到广播的现象,是Android原生+厂商定制的双重限制导致的:
- Android 3.1开始,安装后从未启动过、或者被用户强制停止的应用会处于「停止状态」,系统会拦截所有发往这类应用的广播
- OPPO等国产厂商会在设备重启时,把未开启自启动权限的应用强制重置为禁止运行状态,所以即使之前启动过,重启后还是无法收到广播,必须手动开自启动权限才能正常触发。
内容的提问来源于stack exchange,提问作者Rajeev Kumar
相关产品推荐
相关产品推荐

