Android12,SCHEDULE_EXACT_ALARM权限检查值一直返回true

由于Android12升级,在调用精确闹钟的方法的时候,必须进行SCHEDULE_EXACT_ALARM权限的检查。具体操作请参考:适配Android 12的行为变更-----精确的闹钟权限_袁美丽..的博客-CSDN博客_android 闹钟权限

但是最近在做新机种的时候,在S平台上,虽然clock调用了精确闹钟的方法,但是没做SCHEDULE_EXACT_ALARM权限的检查,没有任何影响(正常来说,如果不处理,在调用精确闹钟的方法时肯定会crash)

经过调查发现:
framework给clock进程加了doze mode白名单

<!-- Whitelist of what components are permitted to run in the background -->
<allow-in-power-save package="com.android.deskclock" />

导致canScheduleExactAlarms的值一直返回的是true

AlarmManagerService$mService#canScheduleExactAlarms
@Override
public boolean canScheduleExactAlarms(String packageName) {
    ......
    if (!isExactAlarmChangeEnabled(packageName, userId)) { // Check the feature flag is on or off
        return true;
    }
    return isExemptFromExactAlarmPermission(packageUid) // ★ Will check DozeMode white list here
            || hasScheduleExactAlarmInternal(packageName, packageUid);
}

AlarmManagerService#isExemptFromExactAlarmPermission
boolean isExemptFromExactAlarmPermission(int uid) {
    return (UserHandle.isSameApp(mSystemUiUid, uid)
            || UserHandle.isCore(uid)
            || mLocalDeviceIdleController == null
            || mLocalDeviceIdleController.isAppOnWhitelist(UserHandle.getAppId(uid))); // ★ Check DozeMode white list
}

不仅clock会有此问题,如果其他应用也加了doze mode白名单,并且也有此逻辑,同样会出现此现象。可以参考一下。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值