CLLocationManager禁用应用程序对位置的使用

时间:2015-07-31 13:50:32

标签: ios cocoa-touch core-location cllocationmanager

我有一个开关,供用户禁用/启用应用程序对该位置的使用。我有两个问题。

1 - 当本机ios弹出窗口出现询问是否允许使用位置时,他说不,我不再显示promixa时间我请求权限弹出窗口,以及启用用户权限的唯一方法在iPhone设置中。

2 - 如果用户已允许使用该位置,但在某些时候您想要禁用该应用程序中存在的开关,则不能。

下面是我正在使用的代码。

-(IBAction)avancar:(id)sender{

    if (locationManager == nil) {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
    }


    if (switchPermissao.isOn) {
        [locationManager startUpdatingLocation];

        if(IS_OS_8_OR_LATER) {
            [locationManager requestWhenInUseAuthorization];
            [locationManager requestAlwaysAuthorization];
        }

    }else{
        [locationManager stopUpdatingLocation];
        [self performSegueWithIdentifier:@"tela2" sender:self];
    }
}

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

    if (status == kCLAuthorizationStatusDenied) {
        [switchPermissao setOn:NO animated:YES];

    }
    else if (status == kCLAuthorizationStatusAuthorizedAlways
             || status == kCLAuthorizationStatusAuthorizedWhenInUse) {

        [switchPermissao setOn:YES animated:YES];
    }

 [self performSegueWithIdentifier:@"tela2" sender:self];    

}

1 个答案:

答案 0 :(得分:0)

RE:1)操作系统只会显示一次权限对话框。用户进行选择后,即使您的代码再次请求权限,操作系统也不会再次显示权限对话框。因此,您必须使用代码处理此问题,以向用户显示自定义对话框/警报。为此,请使用CLLocationManager authorizationStatus获取当前状态。仅当此状态为kCLAuthorizationStatusNotDetermined时,操作系统才会显示系统权限对话框。在所有其他情况下,您需要使用自定义对话框处理权限。

RE:2)您的应用无法更改位置服务的状态,这只能由用户在系统设置下更改。要处理此问题,您可以显示一个自定义对话框,该对话框将打开您应用的系统设置,以便用户可以更改状态。您可以在iOS 8中使用UIApplicationOpenSettingsURLString打开应用的系统设置。