繁体   English   中英

棉花糖应用程序权限:android.location.PROVIDERS_CHANGED未触发

[英]Marshmallow app-permission: android.location.PROVIDERS_CHANGED is not fired

我有一个可收听android.location.PROVIDERS_CHANGED广播的应用程序,以了解手机的当前定位功能。

使用Android M和新的应用程序运行时权限,当从“系统/常规”面板更改位置时,它可以正常工作。 但是,如果用户禁用了专门针对该应用的位置权限,则不会触发相同的广播。

到目前为止,我可以使用常规的AlarmManager测试位置访问权限,但是这很奇怪,而且反应也不灵敏。

是否还有其他特定方法,最好是一种BroadcastReceiver进行注册,以使我们知道Android M的此位置应用程序许可更改?

抱歉,除非您不知悉某些未记录的黑客,否则不会直接通知您有关位置或其他权限的权限更改。

如果用户撤消许可,您的应用程序进程将终止。 这个想法是,当您的应用程序再次运行并调用checkSelfPermission()时,您将了解有关已撤销权限的信息。 该流程针对常规情况进行了优化,在常规情况下,权限检查是在用户打开的活动中进行的。 它不能很好地处理您的情况(不过,恕我直言,位置权限不会像您所描述的那样影响广播)。

在N Developer Preview中,您现在可以设置JobScheduler来监视Uri的更改并根据需要触发您的作业。 这有点像注册ContentObserver ,除了您不需要一直运行该进程— JobScheduler注册观察者并仅在需要时调用JobService 认为已启用的位置源花名册可以在“ Settings提供程序的某个位置找到; 如果是这样,对于Android 6.1 / 7.0 / Turbo System 5000 /无论N变成什么,您都可以使用JobScheduler来查找有关位置源更改的信息,而不必依赖广播。

但是,这对于Android 6.0并没有帮助。 您可以使用JobSchedulerAlarmManager或其他方法来查看是否丢失了权限(通过checkSelfPermission() ),但这有点浪费电池寿命(因此,在Doze模式和可能的应用待机状态下,它们将无法正常工作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM