Dzu*_*gPV 36 android scheduler alarmmanager android-alarms android-workmanager
我在 Play 商店里有一个 Android 应用程序已经有 8 年了。最近Google发布Android S或12引入了一些前台服务启动限制
和 确切的警报权限
https://developer.android.com/about/versions/12/behavior-changes-12#exact-alarm-permission
在应用程序中,我使用前台服务和闹钟来安排来自云和设备传感器的天气数据更新,并向用户发送通知,更新小部件。但他们说:确切的警报应该只用于面向用户的功能,所以如果我继续使用这些 API,它是安全的(根据 Google Play 政策)?
我问这个问题是因为其他解决方案(例如带有前台服务和工作管理器的粘性通知)无法满足我的要求。
صلي*_*ouk 53
如果您正在测试 android 12 那么不要忘记将此行添加到清单中
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
Run Code Online (Sandbox Code Playgroud)
更新:
Android 13 生成了安全异常,解决方案是在清单中添加以下两行:
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
Run Code Online (Sandbox Code Playgroud)
Android 14 更新:
Android 14 上的用户会崩溃,因为默认情况下不再授予该权限。这意味着应该进行运行时检查,如果未授予,则应以编程方式授予它
Ade*_*ino 27
是的,android.permission.SCHEDULE_EXACT_ALARM可以安全使用,在 Android 12 上此权限由 Android 系统自动授予,但在 Android 13 上您需要检查用户是否已授予此权限。
所以需要在manifest中添加权限
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
Run Code Online (Sandbox Code Playgroud)
然后您需要检查是否授予了权限,如果未授予则需要将用户重定向到警报和提醒页面
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
Google 还建议您需要通过注册广播接收器来检查此权限的任何更改,并检查ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED上的更改
归档时间: |
|
查看次数: |
46998 次 |
最近记录: |