如何在Android中监听位置权限的变化(无需触发权限请求)?

14

这真的可能吗?我想创建一个监听器,以便能够接收有关位置权限更改的通知(无论应用程序是否触发它们)。就我所看到的,有获取当前权限状态的方法和请求权限的方法,但没有任何方法可以使应用程序仅仅监听权限变化。

例如,在iOS中,我们可以在CLLocationManager上设置一个委托,然后通过locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)在授权状态发生任何变化时调用。是否有人知道在Android中是否有相当的功能(最好兼容API >= 17)?


没有类似的东西存在,你只能在需要时进行检查。 - tyczj
你提到的方法只能返回你自己包的权限,无法检查其他应用程序。 - Pawel
3
请注意,如果您的应用程序具有位置权限,并且用户进入设置应用程序并禁用您的应用程序的位置权限,Android将在后台运行您的应用程序时终止它(我不知道它是否杀死了进程,但活动堆栈肯定会被清除)。 - Michael
@Pawel 不用担心 - 我不关心其他应用程序的位置权限监控。但是,能够监听全局启用/禁用位置状态将是很好的功能(我知道这可能是一个单独的话题)。 - Rupert
@Michael 谢谢 - 很高兴知道至少活动栈被清除了! - Rupert
2个回答

7

这是可能的吗?

不好意思,不行。

据我所见,有获取当前权限状态和请求权限的方法,但没有简单地允许应用程序监听更改的方法。

如果用户授予您权限,则唯一发现的方法是再次调用checkSelfPermission()

如果用户撤销了先前授予的权限,正如Michael在评论中建议的那样,您的进程将被终止,并且您将在下次运行应用程序时通过调用checkSelfPermission()了解权限更改情况。


谢谢回复。看起来通过检查每个活动创建(因为撤销将销毁活动)来监视吊销应该是可以的,但如果在应用程序的其他地方授予权限,则无法进行监视... - Rupert
@Rupert:“但我们无法监视应用程序其他位置是否发生了权限授予”--正确。 - CommonsWare

4

没有明确的方法来监听位置权限的变化。然而,当我在开发一个自定义视图时,该视图在获取位置权限后有不同的行为,我在视图中注册了活动生命周期回调,并在相关活动的 onResume 时检查位置权限。

一般来说,这个自定义视图的使用者应该自己请求位置权限。当权限请求弹出窗口打开并且用户选择“允许”或“拒绝”时,您父级活动的 onResume 将被触发。这将依次触发您的活动生命周期回调,您可以在其中检查位置权限状态。

但要注意不要通过此生命周期回调泄漏活动实例。


检查 onResume - 对我的使用情况有效 - ++++ - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接