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

Android 12(target SDK 31)定时闹钟不触发onReceive问题求助

Android 12(Target SDK 31)定时闹钟失效适配点

以下是你遗漏的核心适配项:

  • 精确闹钟特殊权限未做运行时校验
    Android 12 中SCHEDULE_EXACT_ALARM不属于安装时自动授予的权限,仅在清单文件声明无效,需要在设置闹钟前主动校验权限状态:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
    if (!alarmMgr.canScheduleExactAlarms()) {
        // 跳转权限设置页引导用户手动开启
        Intent permissionIntent = new Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM, Uri.parse("package:" + context.getPackageName()));
        context.startActivity(permissionIntent);
        return;
    }
}

只有权限校验通过后调用setExactAndAllowWhileIdle才会生效。

  • PendingIntent 常量引用存在潜在错误
    你的代码中PendingIntent.FLAG_IMMUTABLE|FLAG_UPDATE_CURRENT缺少FLAG_UPDATE_CURRENT的类前缀,如未做PendingIntent常量静态导入,会导致flag赋值错误,建议修改为:
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 
    Constants_misc.CONST_INTENT_ALARM, 
    intent, 
    PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
  • 跨进程广播匹配问题
    你为AlarmReceiver指定了android:process=":remote"独立进程属性,显式Intent构造建议补全完整组件信息,避免跨进程匹配失败:
Intent intent = new Intent();
intent.setComponent(new ComponentName(context.getPackageName(), "你的完整包名.survey.AlarmReceiver"));
  • 厂商定制系统权限适配
    小米、华为、OPPO等国产ROM在Android 12上新增了更严格的后台拦截规则,还需要引导用户开启应用的「自启动权限」「后台活动权限」,并将应用加入耗电优化白名单,否则广播会被系统拦截无法触发onReceive。

内容的提问来源于stack exchange,提问作者Bernhard Piskernik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:04