棉花糖应用程序权限:android.location.PROVIDERS\u更改未被激发

棉花糖应用程序权限:android.location.PROVIDERS\u更改未被激发,android,android-6.0-marshmallow,location-services,Android,Android 6.0 Marshmallow,Location Services,我有一个应用程序可以收听android.location.PROVIDERS\u的广播,以了解手机当前的定位功能 使用安卓M和新的应用程序运行时权限,当从系统/常规面板更改位置时,它可以正常工作。但是,如果用户专门为应用程序禁用位置权限,则不会触发相同的广播 到目前为止,我可以用一个普通的AlarmManager测试位置访问,但它很奇怪,响应性不强 有没有其他特定的方法,理想情况下是注册一种BroadcastReceiver,让我们随时了解Android M的位置应用程序权限更改?对不起,您不会

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

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

到目前为止,我可以用一个普通的AlarmManager测试位置访问,但它很奇怪,响应性不强


有没有其他特定的方法,理想情况下是注册一种BroadcastReceiver,让我们随时了解Android M的位置应用程序权限更改?

对不起,您不会直接收到位置或其他权限更改的通知,除非有一些我不知道的未记录的黑客行为

如果用户撤销了权限,则应用程序的进程将终止。这样做的目的是,当你的应用程序再次运行并调用
checkSelfPermission()
时,你会发现被撤销的权限。该流程针对更传统的情况进行了优化,其中权限检查是在用户打开的活动中进行的。它不能很好地处理您的情况(不过,依我看,位置权限不应该像您描述的那样影响广播)

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


不过,这对Android 6.0没有帮助。您可以使用
JobScheduler
AlarmManager
或其他工具查看您是否丢失了权限(通过
checkSelfPermission()
),但这有点浪费电池寿命(因此,在打瞌睡模式和可能的应用程序待机状态下无法正常工作)。

对不起,但是,除非有我不知道的未记录的黑客行为,否则不会直接通知您有关位置或其他权限的权限更改

如果用户撤销了权限,则应用程序的进程将终止。这样做的目的是,当你的应用程序再次运行并调用
checkSelfPermission()
时,你会发现被撤销的权限。该流程针对更传统的情况进行了优化,其中权限检查是在用户打开的活动中进行的。它不能很好地处理您的情况(不过,依我看,位置权限不应该像您描述的那样影响广播)

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


不过,这对Android 6.0没有帮助。您可以使用
JobScheduler
AlarmManager
或其他工具查看您是否丢失了权限(通过
checkSelfPermission()
),但这有点浪费电池寿命(因此,在打瞌睡模式和可能的应用程序待机状态下无法正常工作).

谢谢你的澄清谢谢你的澄清试试这可能有用试试这可能有用