棉花糖应用程序权限:android.location.PROVIDERS_CHANGED 未被触发
Marshmallow app-permission: android.location.PROVIDERS_CHANGED is not fired
我有一个应用程序可以收听 android.location.PROVIDERS_CHANGED 广播以了解 phone 的当前定位功能。
使用 Android M 和新的 App-runtime 权限,当从 system/general 面板更改位置时它可以正常工作。但是,如果用户专门为应用程序禁用位置权限,则不会触发相同的广播。
到目前为止,我可以使用常规的 AlarmManager 测试位置访问,但它很奇怪,而且反应不是很灵敏。
是否有任何其他特定方法,最好是一种 BroadcastReceiver 来注册,让我们通过 Android M 通知此位置应用程序权限更改?
抱歉,我们不会直接通知您有关位置或其他权限的权限更改,除非有一些我不知道的未记录的黑客攻击。
如果用户撤销权限,您的应用进程将终止。这个想法是,当您的应用程序再次运行并调用 checkSelfPermission()
时,您会发现已撤销的权限。该流程针对更传统的情况进行了优化,在这些情况下,权限检查是在用户打开的 activity 中进行的。它不能很好地处理您的情况(不过,恕我直言,位置权限不应像您描述的那样影响广播)。
在 N Developer Preview 中,您现在可以设置 JobScheduler
来监视 Uri
的更改并根据需要触发您的作业。这有点像注册一个 ContentObserver
,只是你不需要一直使用进程 运行 — JobScheduler
注册观察者并根据需要调用你的 JobService
.我 认为 在某个地方的 Settings
提供程序中可以找到已启用位置源的名册;如果是这样,对于 Android 6.1/7.0/Turbo System 5000/无论 N 变成什么,您都可以使用 JobScheduler
来了解位置源的变化,而不是依赖广播。
不过,这对 Android 6.0 没有帮助。您可以使用 JobScheduler
或 AlarmManager
或其他东西来查看您是否丢失了权限(通过 checkSelfPermission()
),但这有点浪费电池寿命(并且因此无法正常工作给定打瞌睡模式和可能的应用程序待机)。
我有一个应用程序可以收听 android.location.PROVIDERS_CHANGED 广播以了解 phone 的当前定位功能。
使用 Android M 和新的 App-runtime 权限,当从 system/general 面板更改位置时它可以正常工作。但是,如果用户专门为应用程序禁用位置权限,则不会触发相同的广播。
到目前为止,我可以使用常规的 AlarmManager 测试位置访问,但它很奇怪,而且反应不是很灵敏。
是否有任何其他特定方法,最好是一种 BroadcastReceiver 来注册,让我们通过 Android M 通知此位置应用程序权限更改?
抱歉,我们不会直接通知您有关位置或其他权限的权限更改,除非有一些我不知道的未记录的黑客攻击。
如果用户撤销权限,您的应用进程将终止。这个想法是,当您的应用程序再次运行并调用 checkSelfPermission()
时,您会发现已撤销的权限。该流程针对更传统的情况进行了优化,在这些情况下,权限检查是在用户打开的 activity 中进行的。它不能很好地处理您的情况(不过,恕我直言,位置权限不应像您描述的那样影响广播)。
在 N Developer Preview 中,您现在可以设置 JobScheduler
来监视 Uri
的更改并根据需要触发您的作业。这有点像注册一个 ContentObserver
,只是你不需要一直使用进程 运行 — JobScheduler
注册观察者并根据需要调用你的 JobService
.我 认为 在某个地方的 Settings
提供程序中可以找到已启用位置源的名册;如果是这样,对于 Android 6.1/7.0/Turbo System 5000/无论 N 变成什么,您都可以使用 JobScheduler
来了解位置源的变化,而不是依赖广播。
不过,这对 Android 6.0 没有帮助。您可以使用 JobScheduler
或 AlarmManager
或其他东西来查看您是否丢失了权限(通过 checkSelfPermission()
),但这有点浪费电池寿命(并且因此无法正常工作给定打瞌睡模式和可能的应用程序待机)。