【问题标题】:Android permission SCHEDULE_EXACT_ALARM required with USE_EXACT_ALARM for alarm app?使用 USE_EXACT_ALARM 需要 Android 权限 SCHEDULE_EXACT_ALARM 用于警报应用程序?
【发布时间】:2022-11-11 10:05:37
【问题描述】:

我的app 已在 Google Play 上发布,目前针对 Android 12,它是一款闹钟应用程序。在最新版本中,我使用了SCHEDULE_EXACT_ALARM 权限,并根据需要在运行时检查和请求此权限。

在检查 Android 13 的行为更改后,我发现有一个新权限 USE_EXACT_ALARM,它具有非常严格的用例,如 here 所列。我的应用程序是一个闹钟应用程序,因此它有资格使用此权限。 (使用这个权限的一个好处是系统会自动授予,用户不能撤销。)

我将此权限添加到AndroidManifest.xml 文件并删除了SCHEDULE_EXACT_ALARM 权限。然而,Android Studio 给了我一个关于方法 alarmManager.setAlarmClock(...) 的 lint 警告:

这是警告的内容:

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

Android Developers website 表示我可以选择声明任何一个基于我的用例的权限。但是,Android lint 告诉我,无论我是否已经声明了 USE_EXACT_ALARM,我都应该声明 SCHEDULE_EXACT_ALARM。

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

【问题讨论】:

  • 我也有同样的问题,你找到答案了吗?
  • @AVEbrahimi 我决定通过关注网站只使用USE_EXACT_ALARM。它似乎这取代了SCHEDULE_EXACT_ALARM 权限。
  • 您是否在 Android 12 上进行了测试?在 Android 12 上,如果没有 SCHEDULE_EXACT_ALARM 它会在设置警报时崩溃

标签: android android-alarms


【解决方案1】:

答案实际上隐藏在USE_EXACT_ALARM permission's documentation 中:

应用程序需要定位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 将可用,而另一个则根本不会被请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 2011-11-12
    • 1970-01-01
    • 2013-06-03
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多