【问题标题】:CLLocationManager permissionsCLLocationManager 权限
【发布时间】:2016-06-24 20:36:23
【问题描述】:

我正在处理位置权限,下一个问题是: 用户从隐私中关闭了位置服务并安装了该应用程序。我有一行代码要求启用位置服务:if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)...,这工作得很好。问题是应用程序不要求允许应用程序使用位置,然后它第二次询问。请求许可代码:

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
    }

注意:如果启用位置服务,一切正常,它会在第一次请求批准。

编辑:权限的完整代码:

-(void)setupPermissions
{
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {

    }

    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
    }
    [self.locationManager startUpdatingLocation];
}

【问题讨论】:

  • 请展示您的代码,而不是谈论您的代码。您尝试获得授权的真实完整代码。谢谢。
  • 是的,对不起。编辑了我的问题。

标签: ios objective-c cllocationmanager


【解决方案1】:

您的代码毫无意义。你有这个:

if (something) {
}
if (somethingelse) {
    [self.locationManager requestWhenInUseAuthorization];
}

所以你有一个if 是空的,另一个if总是运行,不管第一个if 做什么。也许您打算将else if 用于第二个条件?

(请记住,正如您已经被告知的那样,调用 requestWhenInUseAuthorization 是没有意义的,除非状态为未确定。)

【讨论】:

  • 是的,我删除了空的 if。但是我该如何解决这个问题来“跟踪”用户是否将位置服务更改为开启并要求“实时”允许?
  • 如果用户更改位置服务,位置管理代理将获得locationManager:didChangeAuthorizationStatus:
【解决方案2】:

只有当授权状态为未确定时,才能让 iOS 请求用户权限。

如果用户拒绝了您的应用,您可以让他们再次收到提示的唯一方法是卸载该应用,或在设备上重置隐私。

最简单的方法是为警报控制器提供一个设置链接,以便他们可以自己打开它。

Here is a link that shows the process for doing that.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2015-02-20
    • 2023-02-16
    • 1970-01-01
    • 2018-08-13
    相关资源
    最近更新 更多