目标C - CLLocationManager查找何时单击“允许”或“不允许”

时间:2011-09-28 07:21:12

标签: objective-c cllocationmanager

在执行CLLocationManager时,是否存在一个委托方法,当用户单击“允许”或“不允许”提示该请求使用位置时会调用该方法?

我尝试了这个但是在用户“允许”或“不允许”之后不会调用它。

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

此外,是否有一个变量可以告诉我用户选择了什么?

我尝试了以下内容,但总是返回true。

locationManager.locationServicesEnabled

谢谢你,
三通

4 个答案:

答案 0 :(得分:7)

有一个委托方法

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized) {
        // user allowed
    }

}

答案 1 :(得分:4)

[CLLocationManager locationServicesEnabled]仅告知您是否在设备上启用了位置服务。

[CLLocationManager authorizationStatus]会返回您要查找的实际状态。

答案 2 :(得分:1)

您必须实施didFailWithError:方法:

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {

    if ([error domain] == kCLErrorDomain) {

        // We handle CoreLocation-related errors here
        switch ([error code]) {
        // "Don't Allow" on two successive app launches is the same as saying "never allow". The user
        // can reset this for all apps by going to Settings > General > Reset > Reset Location Warnings.
        case kCLErrorDenied:

        case kCLErrorLocationUnknown:

        default:
            break;
        }

    } else {
    // We handle all non-CoreLocation errors here
    }
}

编辑:查看CLLocationManager的参考资料我发现了这个:

+ (CLAuthorizationStatus)authorizationStatus
  

返回值   指示应用程序是否已获得授权的值   使用位置服务。

     

讨论管理给定应用程序的授权状态   由系统决定并由几个因素决定。申请必须是   明确授权用户使用位置服务   当前必须为系统启用位置服务。   此授权在您的申请时自动进行   首次尝试使用位置服务。

答案 3 :(得分:0)

locationManager.locationServicesEnabled表示位置服务是否可用,但并不一定意味着它们适用于您的应用。

如果您需要查找某个时间点的状态,请使用CLLocationManager.authorizationStatus()

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status;

请注意,自iOS 8起,当您的应用程序首次尝试使用位置服务时,授权请求不会自动发生。在requestWhenInUseAuthorization()实例上调用startUpdatingLocation()之前,您需要明确致电CLLocationManager

并确保您在Info.plist中拥有NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription键,具体取决于您所使用的授权类型。如果缺少这些,则没有错误,没有日志,没有提示,没有任何可以指向正确方向的东西:)