我有一个应用程序,它会监听android.location.PROVIDERS_CHANGED广播以了解手机的当前位置功能。</ p>
使用Android M和新的App-runtime权限,当从系统/常规面板更改位置时,它可以正常工作。但是,如果用户专门为App禁用了位置权限,则不会触发相同的广播。
到目前为止,我可以使用常规的AlarmManager测试位置访问,但它很奇怪而且响应不是很快。
是否有任何其他特定方法,理想情况下是一种要注册的BroadcastReceiver,让我们了解这个位置app-permission-change with Android M?
答案 0 :(得分:2)
抱歉,您不会直接通知您有关权限更改,地理位置或其他权限的信息,除非我发现了一些我未发现的无证件黑客攻击。
如果用户撤消权限,您的应用程序流程将被终止。我们的想法是,当您的应用再次运行并致电checkSelfPermission()
时,您会了解已撤销的权限。该流程针对更常规的情况进行了优化,其中权限检查在用户打开的活动中进行。它并没有很好地处理你的情况(但是,恕我直言,位置权限不应该像你描述的那样影响广播)。
在N开发者预览版中,您现在可以设置JobScheduler
来监控Uri
的更改并根据需要触发您的工作。这有点像注册ContentObserver
,除了您不需要一直运行进程 - JobScheduler
注册观察者并根据需要调用JobService
。我认为已在某个地方的Settings
提供商处找到已启用位置来源的名单;如果是这样,对于Android 6.1 / 7.0 / Turbo System 5000 /无论N变成什么,您都可以使用JobScheduler
来查找位置源更改,而不是依赖于广播。
JobScheduler
或AlarmManager
或其他内容查看您是否丢失了权限(通过checkSelfPermission()
),但这样做会浪费电池寿命(因此,在Doze模式和可能的应用待机模式下,它将无法正常工作。