【问题标题】:How can we listen for location permission changes in Android (without triggering a permission request)?我们如何在 Android 中监听位置权限的变化(不触发权限请求)?
【发布时间】:2018-12-21 23:06:01
【问题描述】:

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

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

【问题讨论】:

  • 这种东西不存在,需要的时候才能查看
  • 你提到的方法只返回你自己包的权限,不能查看其他应用。
  • 另外请注意,如果您的应用程序具有位置权限,并且用户进入设置应用程序并禁用您的应用程序的位置权限,如果您的应用程序在后台运行,Android 将终止它(我不知道它是否会杀死进程,但无论如何都会清除活动堆栈)。
  • @Pawel 别担心——我不担心监控其他应用的位置权限。但是,如果能够收听位置状态的全局启用/禁用,那就太好了(我知道这可能是一个单独的主题)。
  • @Michael 谢谢——很高兴知道至少活动堆栈已被清除!

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    有可能吗?

    不,抱歉。

    据我所知,有获取当前权限状态的方法和请求权限的方法,但没有任何方法可以简单地让应用程序监听更改。

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

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

    【讨论】:

    • 感谢您的回复。所以看起来应该可以通过检查每个活动的创建来监控撤销(因为撤销会破坏活动),但是如果它发生在应用程序的其他地方,我们无法监控权限授予......
    • @Rupert:“但如果权限授予发生在应用程序的其他地方,我们无法监控它”——正确。
    猜你喜欢
    • 2019-11-27
    • 1970-01-01
    • 2018-12-21
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多