我有一个Android应用程序在播放商店8年。最近谷歌发布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
在应用程序中,我使用前台服务和闹钟来安排更新来自云和设备传感器的天气数据,并向用户发送通知,更新小部件。但他们说:***精确警报应仅用于面向用户的功能***因此,如果我继续使用这些API,它是安全的(根据Google Play政策)?
我问这个是因为其他解决方案,如前台服务和工作管理器的粘性通知不能满足我的要求。
5条答案
按热度按时间3bygqnnd1#
如果你正在测试android 12,那么不要忘记添加此行到清单
rkue9o1l2#
是的,android.permission.SCHEDULE_EXACT_ALARM可以安全使用,在Android 12上,此权限由Android系统自动授予,但在Android 13上,您需要检查用户是否已授予此权限。
因此,您需要将权限添加到清单
然后,您需要检查是否已授予权限,如果未授予,则需要将用户重定向到“Alarms & Reminders”页面
Google还建议您通过注册广播接收器来检查此权限的任何更改,并在ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED上检查更改
z9ju0rcb3#
谷歌声明:“*(当您的应用程序)需要精确定时的操作 "。您的用例是“ 计划更新天气数据(...)向用户发送通知 *"。虽然这可能是面向用户的,但似乎不需要精确地在某个时间执行。我猜您的应用程序不符合条件。
当前需要附加权限的方法有:
setExact()
,setExactAndAllowWhileIdle()
和setAlarmClock()
。重复的警报总是不准确的。看起来处理天气数据和设备传感器是重复的事情。idfiyjo84#
从您提到的内容来看,您谈论的是面向用户的功能。
一个假设的相反例子是Facebook在某个特定时间强制用户数据同步。这将是不好的,因为最好不要对这类事情强制制定时间表,因为它是在特定时间发生还是在系统资源没有被其他服务使用的一分钟后发生都无关紧要。
此外,“应该”意味着这是一个推荐。Facebook * 可以 * 做到以上几点,但这将是一个次优的解决方案。最好把对这类服务的控制权留给Android,因为它可能会在分配资源和防止延迟方面做得更好。所以换句话说,你不听他们的推荐不会让你的应用程序从应用程序商店或类似的东西中删除。
另外,你从第二个链接中引用的段落有一个可接受用例的链接,它提到了报警应用程序。这可能是你的问题被否决的原因。
smdnsysy5#
有效的解决方案,您需要在〈application之前将权限添加到清单中