You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:54:03