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

为何我的Broadcast Receiver重启时触发?需仅响应BOOT_COMPLETED事件

解决重启时Broadcast Receiver非预期触发的问题

看起来你遇到的问题是:设备重启时,你的Broadcast Receiver里的通用逻辑(第一个Toast)也会被执行,但你只希望在收到BOOT_COMPLETED广播(设备重启完成)时运行对应的分支代码。下面是针对性的解决方案:

1. 精简Receiver的广播监听范围

首先检查你的Manifest配置,确保这个Receiver只监听BOOT_COMPLETED广播,避免被其他系统广播意外触发。正确的注册应该是这样的:

<!-- 确保权限声明正确 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<receiver android:name=".YourBootReceiverClass">
    <intent-filter>
        <!-- 只保留BOOT_COMPLETED的action,移除其他无关的广播监听 -->
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

这样配置后,你的Receiver只会在设备重启完成时被唤醒,不会响应其他广播。

2. 优化onReceive的逻辑判断

你当前的代码在判断action之前就执行了第一个Toast,这会导致只要Receiver被触发(哪怕是其他广播),这个Toast都会显示。把所有逻辑都放到action判断分支里,就能确保只有重启完成时才执行:

@Override
public void onReceive(Context context, Intent intent) {
    // 仅当收到BOOT_COMPLETED广播时执行逻辑
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        Toast.makeText(context,"Works",Toast.LENGTH_LONG).show();
        Toast.makeText(context,"works _ second",Toast.LENGTH_LONG).show();
    }
}

这里建议使用Intent.ACTION_BOOT_COMPLETED常量代替硬编码的字符串,避免拼写错误。

3. 额外注意点

  • 从Android 8.0(API 26)开始,系统对静态注册的Receiver有广播限制,但BOOT_COMPLETED属于允许静态注册的例外广播,所以你的配置是有效的。
  • 测试时,确保手机已经完成重启(进入桌面后),因为BOOT_COMPLETED广播是在系统启动流程完全结束后才发送的。

内容的提问来源于stack exchange,提问作者Hatay Berkay Işıkoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:18:36