问题重现

简单讲,就是以Android 12为目标平台的App,如果使用到了AlarmManager来设置定时任务,并且设置的是精准的闹钟(使用了setAlarmClock()、setExact()、setExactAndAllowWhileIdle()这几种方法),则需要确保SCHEDULE_EXACT_ALARM权限声明且打开,否则App将崩溃并出现以下警告:

df34419b850f433384c88d4424280c49_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0

问题原因:精确的闹钟权限

为了节省系统资源,Android12引入了SCHEDULE_EXACT_ALARM权限进行“闹钟和提醒”功能的授权管理。Android13则又引入了新的闹钟权限USE_EXACT_ALARM。
和Android12的SCHEDULE_EXACT_ALARM权限不同,如果App已经申请使用了USE_EXACT_ALARM新权限,那么用户是不能在设置页面里关闭授权的。
对于日程管理、时间管理等类型的App来讲,Android13引入的USE_EXACT_ALARM权限能够带来一定便利。相比Android12的SCHEDULE_EXACT_ALARM权限,使用新权限的应用将不再需要频繁打扰用户进行授权,能够更高效地为用户提供闹钟、日程提醒等服务。
不过,为了防止新权限被滥用,GooglePlay设置了严格的上架审核机制。开发者要注意,一旦使用了USE_EXACT_ALARM权限,App在上架GooglePlay时将会被平台严格审查。除非App属于闹钟、计时器、日历等类型的应用或者在已被列入到应用市场的白名单里,否则GooglePlay将不会允许使用该权限的应用上架。

(检查优化电池用例)(https://developer.android.com/training/monitoring-device-state/doze-standby#support_for_other_use_cases)
通过妥善管理网络连接、闹钟、作业和同步以及使用高优先级 FCM 消息,几乎所有应用都应该能够支持低电耗模式。对于一小部分用例,这可能还不够。对于此类用例,系统提供了一个可配置的白名单,将部分免除低电耗模式和应用待机模式优化的应用列入其中。

在低电耗模式和应用待机模式期间,列入白名单的应用可以使用网络并保留部分唤醒锁定。不过,列入白名单的应用仍会受到其他限制,就像其他应用一样。例如,列入白名单的应用的作业和同步会延迟(在搭载 API 级别 23 及更低级别的设备上),并且其常规 AlarmManager 闹钟不会触发。应用可以调用 isIgnoringBatteryOptimizations() 来检查它当前是否在豁免白名单中。

用户可以依次转到设置 > 电池 > 电池优化来手动配置该白名单。另外,系统也提供了一些方法,让应用要求用户将其列入白名单。

应用可以触发 ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS Intent,让用户直接转到电池优化,以便他们在其中添加该应用。
具有 REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 权限的应用可以触发一个系统对话框,让用户直接将该应用添加到白名单,而无需转到“设置”。此类应用将通过触发 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 来触发该对话框。
用户可以根据需要从白名单中手动移除应用。
在要求用户将您的应用添加到白名单之前,请确保该应用符合列入白名单的可接受用例。

注意:除非应用的核心功能受到不利影响,否则 Google Play 政策禁止应用请求直接免除 Android 6.0 及更高版本中的电源管理功能(低电耗模式和应用待机模式)的制约。

SCHEDULE_EXACT_ALARM

Added in API level 31

public static final String SCHEDULE_EXACT_ALARM
Allows applications to use exact alarm APIs.

This is a special access permission that can be revoked by the system or the user. It should only be used to enable user-facing features that require exact alarms. For more details, please go through the associated developer docs.

Apps need to target API Build.VERSION_CODES.S or above to be able to request this permission. Note that apps targeting lower API levels do not need this permission to use exact alarm APIs.

Apps that hold this permission, always stay in the WORKING_SET or lower standby bucket.

If your app relies on exact alarms for core functionality, it can instead request USE_EXACT_ALARM once it targets API Build.VERSION_CODES.TIRAMISU. All apps using exact alarms for secondary features (which should still be user facing) should continue using this permission.

Protection level: appop

Constant Value: "android.permission.SCHEDULE_EXACT_ALARM"

USE_EXACT_ALARM

Allows apps to use exact alarms just like with SCHEDULE_EXACT_ALARM but without needing to request this permission from the user.

解决办法

在AndroidManifest.xml清单文件中声明 SCHEDULE_EXACT_ALARM 权限
ca4ed4cb9c894b8b9f61ea5a5aa1682b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0

判断是否具有设置精确闹钟的权限
6434567f5b2a4502adec5d2094c96bf5_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0

打开闹钟和提醒权限授权页面,进行授权
bbfa6f4f39054c2f97f852339a5f1241_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0

原文地址:http://www.cnblogs.com/loaf/p/scheduleexactalarm-quan-xian-zaiandroid120beng-kui.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性