Marshmallow app-permission:android.location.PROVIDERS_CHANGED未被解雇

时间:2016-03-11 12:46:20

标签: android android-6.0-marshmallow location-services

我有一个应用程序,它会监听android.location.PROVIDERS_CHANGED广播以了解手机的当前位置功能。<​​/ p>

使用Android M和新的App-runtime权限,当从系统/常规面板更改位置时,它可以正常工作。但是,如果用户专门为App禁用了位置权限,则不会触发相同的广播。

到目前为止,我可以使用常规的AlarmManager测试位置访问,但它很奇怪而且响应不是很快。

是否有任何其他特定方法,理想情况下是一种要注册的BroadcastReceiver,让我们了解这个位置app-permission-change with Android M?

1 个答案:

答案 0 :(得分:2)

抱歉,您不会直接通知您有关权限更改,地理位置或其他权限的信息,除非我发现了一些我未发现的无证件黑客攻击。

如果用户撤消权限,您的应用程序流程将被终止。我们的想法是,当您的应用再次运行并致电checkSelfPermission()时,您会了解已撤销的权限。该流程针对更常规的情况进行了优化,其中权限检查在用户打开的活动中进行。它并没有很好地处理你的情况(但是,恕我直言,位置权限不应该像你描述的那样影响广播)。

在N开发者预览版中,您现在可以设置JobScheduler来监控Uri的更改并根据需要触发您的工作。这有点像注册ContentObserver,除了您不需要一直运行进程 - JobScheduler注册观察者并根据需要调用JobService。我认为已在某个地方的Settings提供商处找到已启用位置来源的名单;如果是这样,对于Android 6.1 / 7.0 / Turbo System 5000 /无论N变成什么,您都可以使用JobScheduler来查找位置源更改,而不是依赖于广播。

但是,对于Android 6.0,这并不能帮到你。您可以使用JobSchedulerAlarmManager或其他内容查看您是否丢失了权限(通过checkSelfPermission()),但这样做会浪费电池寿命(因此,在Doze模式和可能的应用待机模式下,它将无法正常工作。