My app 是一款闹钟应用,已在 Google Play 上发布,目前针对 Android 12。在最新版本中,我使用了
SCHEDULE_EXACT_ALARM
权限,并根据需要在运行时处理检查和请求此权限。
在检查 Android 13 的行为更改时,我发现有一个新权限
USE_EXACT_ALARM
,它具有非常严格的用例,如此处所列。我的应用程序是一个闹钟应用程序,因此它有资格使用此权限。 (使用此权限的一个优点是系统自动授予它,并且用户无法撤销它。)
我将此权限添加到
AndroidManifest.xml
文件中,并删除了 SCHEDULE_EXACT_ALARM
权限。但是,Android Studio 在该方法上给了我一个 lint 警告 alarmManager.setAlarmClock(...)
:
警告内容如下:
使用
设置精确警报需要用户setAlarmClock
许可或权力豁免;它适用于用户故意安排在精确时间发生的操作的应用程序,例如闹钟、时钟、日历等。查看有关此权限的 javadoc 以确保您的用例有效。SCHEDULE_EXACT_ALARM
Android 开发者网站说我可以选择根据我的用例声明任一权限。然而,Android lint 告诉我,无论我是否已经声明了
SCHEDULE_EXACT_ALARM
,我都应该声明 USE_EXACT_ALARM
。
我该怎么办?关注网站并抑制 lint?
USE_EXACT_ALARM
权限文档中:
所以这是一件有条件的事情 - 如果您年满 33 岁,那么应用程序需要定位
或以上才能请求此权限。请注意,设备上只能请求API Build.VERSION_CODES.TIRAMISU
USE_EXACT_ALARM
或中的SCHEDULE_EXACT_ALARM
之一。如果您的应用已经在较旧的 SDK 上使用SCHEDULE_EXACT_ALARM
,但在 SDK 33 及更高版本上需要USE_EXACT_ALARM
,则应使用 max-sdk 属性声明,例如:SCHEDULE_EXACT_ALARM
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" android:maxSdkVersion="32" />
USE_EXACT_ALARM
将可用,而根本不会要求另一个。
由于此权限是受限权限,因此请求此受限权限的应用程序将接受审查,而那些不符合可接受用例标准的应用程序将被禁止在 Google Play 上发布。
https://support.google.com/googleplay/android-developer/answer/9888170?sjid=10510309997098831402-AP
因此,如果您的应用程序不是闹钟或日历应用程序,请考虑使用 SCHEDULE_EXACT_ALARM 权限教程中提到了有关如何使用此权限的更多信息