从whenInUse到Always

时间:2017-08-03 04:26:34

标签: ios swift cllocationmanager

我想将应用程序位置权限从whenInUse升级为always。

根据文档,requestAlwaysAuthorization()API可以完成这项工作。 这里的问题是 -

只有在使用永远不会被拒绝的情况下才会提示。这也只能做一次。

有没有办法,我可以确定requestAlwaysAuthorization()由于上述原因而无法显示提示?

可能的解决方案: 当应用程序首次请求许可时,我可以将用户决策存储到UserDefaults中,因此我将第二次了解它的行为。

是否有其他方法可以检查是否已提示提示。

注意:locationManager:didFailWithError:不执行此任务。我已经尝试过了。

2 个答案:

答案 0 :(得分:0)

可能这就是你所需要的:

    func isLocationServiceAvailable() -> Bool {

        if (CLLocationManager.authorizationStatus() == .authorizedWhenInUse || CLLocationManager.authorizationStatus() == .authorizedAlways) {
            return true;
        }
        return false;
    }

答案 1 :(得分:0)

您需要检查一个是操作系统级别,另一个是启用了应用级别位置服务。

  

对于使用以下变量的操作系统级别,您可以操作该值   userdefaults

var osLevellocationServicesEnabled: Bool {
        return CLLocationManager.locationServicesEnabled()
    }
  

对于使用以下变量的appLevel,您可以操作值   userdefaults。例如,如果用户始终拒绝权限   使用下面的变量,您可以更新userdefault中的值是/否   相应然后根据你可以提示自定义警报   用户要求手动更新位置设置

var appLevelLocationServicesEnabled: Bool {
       return CLLocationManager.authorizationStatus() == .authorizedAlways
    }