我们如何才能监听Android中的位置权限更改(不触发权限请求)?

时间:2018-07-13 14:20:24

标签: java android kotlin android-location android-fusedlocation

有可能吗?我希望能够创建一个侦听器,该侦听器将收到有关位置权限更改的通知(无论应用是否触发了它们)。据我所知,有一些获取当前权限状态的方法和一些请求权限的方法,但是没有什么方法可以让应用程序监听更改。

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

2 个答案:

答案 0 :(得分:1)

  

有可能吗?

不,对不起。

  

据我所知,有一些获取当前权限状态的方法和一些请求权限的方法,但是没有什么方法只会让应用程序监听更改。

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

如果用户撤消了先前授予的权限(如Michael在a comment中建议的那样),则您的过程将终止,您将在下次您的应用运行时通过调用checkSelfPermission()来了解权限更改

答案 1 :(得分:0)

没有明确的方法来监听位置许可更改。但是,当我开发一个自定义视图时,当存在位置权限时该行为具有不同的行为,我在视图中注册了活动生命周期回调,并且在触发相关活动的onResume时将检查位置权限。

通常,此自定义视图的使用者应自己请求位置权限。当权限请求弹出窗口打开并且用户选择“允许”或“拒绝”时,将触发父活动的onResume。反过来,这将触发您的活动生命周期回调,您可以在此处检查位置权限状态。

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