闹钟应用程序需要 Android 权限 SCHEDULE_EXACT_ALARM 和 USE_EXACT_ALARM 吗?

问题描述 投票:0回答:2

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
设置精确警报需要用户
SCHEDULE_EXACT_ALARM
许可或权力豁免;它适用于用户故意安排在精确时间发生的操作的应用程序,例如闹钟、时钟、日历等。查看有关此权限的 javadoc 以确保您的用例有效。

Android 开发者网站说我可以选择根据我的用例声明任一权限。然而,Android lint 告诉我,无论我是否已经声明了

SCHEDULE_EXACT_ALARM
,我都应该声明
USE_EXACT_ALARM

我该怎么办?关注网站并抑制 lint?

android android-alarms
2个回答
12
投票

答案实际上隐藏在

USE_EXACT_ALARM
权限文档中:

应用程序需要定位

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" />

所以这是一件有条件的事情 - 如果您年满 33 岁,那么

USE_EXACT_ALARM

 将可用,而根本不会要求另一个。


0
投票
USE_EXACT_ALARM 是自动授予的受限权限。用户无法撤销此权限。

由于此权限是受限权限,因此请求此受限权限的应用程序将接受审查,而那些不符合可接受用例标准的应用程序将被禁止在 Google Play 上发布。

仅当您的应用程序的核心、面向用户的功能需要精确定时的操作时,您的应用程序才必须使用 USE_EXACT_ALARM 功能,例如:

    该应用程序是闹钟或计时器应用程序。
  1. 该应用程序是一个显示事件通知的日历应用程序。
Google Android 权限策略列表中提到了此限制:

https://support.google.com/googleplay/android-developer/answer/9888170?sjid=10510309997098831402-AP

因此,如果您的应用程序不是闹钟或日历应用程序,请考虑使用 SCHEDULE_EXACT_ALARM 权限

教程中提到了有关如何使用此权限的更多信息

© www.soinside.com 2019 - 2024. All rights reserved.