闹钟应用的 USE_EXACT_ALARM 需要 Android 权限 SCHEDULE_EXACT_ALARM 吗?

Wri*_*asu 9 android android-alarms

我的应用程序已在 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?

cac*_*acs 17

答案实际上隐藏在USE_EXACT_ALARM许可的文档中:

应用程序需要定位API Build.VERSION_CODES.TIRAMISU或更高级别才能请求此权限。请注意,设备上只能请求之一USE_EXACT_ALARM如果您的应用程序已在较旧的 SDK 上使用,但需要SDK 33 及更高版本,则应使用 max-sdk 属性进行声明,例如:SCHEDULE_EXACT_ALARMSCHEDULE_EXACT_ALARMUSE_EXACT_ALARMSCHEDULE_EXACT_ALARM

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"
   android:maxSdkVersion="32" />
Run Code Online (Sandbox Code Playgroud)

所以这是一件有条件的事情——如果你年满 33 岁,那么USE_EXACT_ALARM就可以提供,而另一个则根本不会被要求。

  • 喔好吧。所以我们两者都需要,并为旧的指定最大 SDK。谢谢! (5认同)