Android 12:在 Google Play 政策中使用 SCHEDULE_EXACT_ALARM 权限在特定时间获取/显示数据是否安全?

我在 Play 商店中有一个 Android 应用程序 8 年。最近 Google 发布的 Android S 或 12 引入了一些限制与前台服务启动限制

https://developer.android.com/about/versions/12/behavior-changes-12#foreground-service-launch-restrictions

准确的报警权限

https://developer.android.com/about/versions/12/behavior-changes-12#exact-alarm-permission

在应用程序中,我使用前台服务和闹钟来安排从云和设备传感器更新天气数据并向用户发送通知,更新小部件。但他们说: **Exact alarms should only be used for user-facing features** 所以如果我继续使用这些 API,它是安全的(使用 Google Play 政策)?

我之所以这样问,是因为其他解决方案(例如带有前台服务和 workmanager 的粘性通知)不能满足我的要求。

stack overflow Android 12: Using SCHEDULE_EXACT_ALARM permission to get/show data at specific time are safe in Google Play Policy?
原文答案

答案:

作者头像

如果您正在测试 android 12,请不要忘记将此行添加到 Manifest

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
作者头像

谷歌声明:“ (when your app) requires precisely-timed actions ”。您的用例是“ to schedule update weather data (…) send notification to user ”。虽然这可能是面向用户的,但似乎并不需要精确到某个时间。我猜你的应用不符合条件。

目前需要额外权限的方法有: setExact()setExactAndAllowWhileIdle()setAlarmClock() 。重复警报总是不准确的。似乎获取处理天气数据和设备传感器无论如何都是重复的。

作者头像

是的,android.permission.SCHEDULE_EXACT_ALARM 可以安全使用,在 Android 12 上,此权限由 Android 系统自动授予,但在 Android 13 上,您需要检查用户是否已授予此权限。

所以你需要在清单中添加权限

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>

然后您需要检查是否已授予权限,如果未授予,则需要将用户重定向到警报和提醒页面

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    val alarmManager = ContextCompat.getSystemService(context, AlarmManager::class.java)
    if (alarmManager?.canScheduleExactAlarms() == false) {
        Intent().also { intent ->
            intent.action = Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM
            context.startActivity(intent)
        }
    }
}

Google 还建议您需要通过注册广播接收器来检查此权限的任何更改,并检查 ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED 上的更改

作者头像

从您提到的内容来看,您正在谈论面向用户的功能。

一个相反的假设示例是 Facebook 强制在某个特定时间同步用户数据。这会很糟糕,因为最好不要对这些类型的事情强制安排时间表,因为当其他服务不使用系统资源时,它是否发生在特定时间或一分钟后并不重要。

此外,“应该”意味着这是一项建议。 Facebook can 执行上述操作,但这不是最佳解决方案。最好将这些服务的控制权留给 Android,因为它可能会在分配资源和防止延迟方面做得更好。所以换句话说,你不听他们的建议不会让你的应用从应用商店或类似的东西中删除。

此外,您从第二个链接引用的段落有一个指向 examples of acceptable use cases 的链接,它提到了警报应用程序。这可能就是您的问题被否决的原因。

相关问题