当用户拒绝位置时显示位置请求提示

Posted

技术标签:

【中文标题】当用户拒绝位置时显示位置请求提示【英文标题】:Displaying location request prompt when user denies the location 【发布时间】:2017-03-26 00:11:33 【问题描述】:

当用户拒绝跟踪他的位置并且整个应用程序基于当前位置时,处理这种情况的正确方法是什么?我在 viewDidAppear 中调用了locationAuthorization(),当用户允许该位置时它工作正常。

func locationAuthorization()
    if CLLocationManager.authorizationStatus() == .authorizedWhenInUse
        refreshData()

     else if (CLLocationManager.authorizationStatus() == .denied) 
        addressButton.isHidden = true
     else 
        locationManager.requestWhenInUseAuthorization()
        sleep(2)
        locationAuthorization()
    

我试图在 .denied 语句中调用 locationAuthorization(),但它显然不起作用。输入locationManager.requestWhenInUseAuthorization() 也不起作用。 那么当用户点击“不允许”时,处理这种情况的最佳方法是什么?它使我的应用程序无法使用,因此我必须显示位置窗口,直到用户接受它。

【问题讨论】:

您请求授权、休眠、然后再次调用locationAuthorization 的逻辑很糟糕。请不要那样做。 而您需要妥善处理其他情况。仅在当前未知时请求授权。即使受到限制,您也在请求。这有点毫无意义。 @rmaddy 我知道睡眠不是最好的选择,但没有它就行不通。 使用适当的委托方法在授权更改时被告知。 @rmaddy 感谢您的帮助。我使用 locationManager(... didChangeAuthorization) 然后添加警报以进入设置,现在它可以在没有睡眠和其他奇怪方法的情况下工作。 【参考方案1】:

把它放在.denied 部分:

let alert = UIAlertController(title: "Need Authorization", message: "This app is unusable if you don't authorize this app to use your location!", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Settings", style: .default, handler:  _ in
    let url = URL(string: UIApplicationOpenSettingsURLString)!
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
))
self.present(alert, animated: true, completion: nil)

您不能再次请求授权,但您可以告诉人们在设置中进行更改。

【讨论】:

我将“确定”按钮标记为“设置”,将“否”按钮标记为“取消”。

以上是关于当用户拒绝位置时显示位置请求提示的主要内容,如果未能解决你的问题,请参考以下文章

当视图在iOS中加载时如何在缩放时显示用户当前位置?

用户拒绝位置服务后再次请求权限?

127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问

如何让谷歌地图再次请求位置权限?

当用户在运行时权限对话框上单击拒绝时显示 DialogFragment

Flutter Geolocator 和 Google Maps:显示静态位置