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

Android中FCM推送触发闹钟重启延迟及设备重启状态判断

解决设备重启后FCM推送触发闹钟延迟的问题

嘿,这个问题我之前做项目时也碰到过!不少厂商的定制系统会延迟甚至抑制ACTION_BOOT_COMPLETED广播,导致依赖这个广播重置闹钟的逻辑失效,进而出现闹钟响铃延迟的情况。下面给你两个可靠的方法,让你在接收FCM推送时就能判断设备是否处于刚重启的状态:

方法1:通过系统启动时间判断

设备重启后,SystemClock.elapsedRealtime()会重置为0,我们可以通过计算当前时间与系统启动时间的差值,来判断设备是否刚重启不久。具体实现代码如下:

  1. 计算系统启动的时间戳:
long bootTime = System.currentTimeMillis() - SystemClock.elapsedRealtime();
  1. 设置合理阈值(比如5分钟,可按需调整),对比当前时间与启动时间的间隔:
long currentTime = System.currentTimeMillis();
// 判断是否处于重启后5分钟内
boolean justRebooted = (currentTime - bootTime) < 5 * 60 * 1000;

如果justRebooted返回true,说明设备刚重启,此时你可以直接重新设置闹钟,不用等BOOT_COMPLETED广播触发。

方法2:用SharedPreferences标记重启状态

我们可以在BOOT_COMPLETED广播接收器中标记系统已完成启动,在接收FCM推送时检查这个标记——如果标记不存在或为false,就判定设备刚重启:

  1. 在BOOT_COMPLETED广播接收器中写入标记:
@Override
public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
        SharedPreferences prefs = context.getSharedPreferences("AppBootPrefs", Context.MODE_PRIVATE);
        prefs.edit().putBoolean("isBootCompleted", true).apply();
        // 这里也可以顺便重置所有需要的闹钟
        resetAllAlarms(context);
    }
}
  1. 在FCM推送接收逻辑中检查标记:
SharedPreferences prefs = getApplicationContext().getSharedPreferences("AppBootPrefs", Context.MODE_PRIVATE);
boolean isBootCompleted = prefs.getBoolean("isBootCompleted", false);

if (!isBootCompleted) {
    // 设备刚重启,还没收到BOOT_COMPLETED广播,直接重置目标闹钟
    resetYourTargetAlarm();
    // 更新标记,避免重复处理
    prefs.edit().putBoolean("isBootCompleted", true).apply();
}

另外,别忘了在应用首次安装启动时初始化这个标记,避免误判:

// 在自定义Application的onCreate方法中
SharedPreferences prefs = getSharedPreferences("AppBootPrefs", Context.MODE_PRIVATE);
if (!prefs.contains("isBootCompleted")) {
    prefs.edit().putBoolean("isBootCompleted", true).apply();
}

额外提示

  • 你的闹钟设置代码已经适配了不同Android版本的API(setExactAndAllowWhileIdle等),这部分逻辑没问题,继续保留即可。
  • 部分厂商会限制应用自启动权限,记得引导用户开启,否则BOOT_COMPLETED广播可能完全无法接收。

内容的提问来源于stack exchange,提问作者Asha Soman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:31