我有一个可监听android.location.PROVIDERS_CHANGED广播的应用程序,以了解手机的当前定位功能。
使用Android M和新的“应用程序运行时”权限,当从“系统/常规”面板更改位置时,它可以正常工作。但是,如果用户禁用了专门针对该应用程序的位置权限,则不会触发相同的广播。
到目前为止,我可以使用常规的AlarmManager测试位置访问权限,但是这很奇怪,而且反应也不灵敏。
是否还有其他特定方法,最好是一种BroadcastReceiver进行注册,以使我们了解Android M的此位置应用程序许可更改?
抱歉,除非您不知悉某些未记录的黑客,否则不会直接通知您有关位置或其他权限的权限更改。
如果用户撤消许可,则您的应用程序过程将终止。这样做的想法是,当您的应用再次运行并致电时,您将了解有关已撤销权限的信息checkSelfPermission()
。该流程针对更常规的情况进行了优化,在更常规的情况下,权限检查是在用户打开的活动中进行的。它不能很好地处理您的情况(不过,恕我直言,位置权限不会像您所描述的那样影响广播)。
在N Developer Preview中,您现在可以设置JobScheduler
为监视Uri
更改并根据需要触发作业。这有点像注册a ContentObserver
,除了您不需要一直运行该进程—JobScheduler
注册观察者并JobService
根据需要调用您的代码。我认为已启用的位置源花名册可在Settings
提供商中找到。如果是这样,对于Android 6.1 / 7.0 / Turbo System 5000 /无论N变成什么,您都可以使用它JobScheduler
来查找位置源更改,而不必依赖广播。
但是,这对于Android 6.0并没有帮助。您可以使用JobScheduler
或AlarmManager
或其他方式查看是否丢失了许可(通过checkSelfPermission()
),但这有点浪费电池寿命(因此,在打ze模式和可能的应用待机状态下,该功能将无法正常工作)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句