Тестовые испытания на местах пропускают, когда они отключены в ViewDidload

StackOverflow https://stackoverflow.com/questions/3401757

  •  25-09-2019
  •  | 
  •  

Вопрос

У меня есть услуги по размеру, отключенные для моего приложения на панели настроек. Я запускаю тест в ViewDidload в моем контроллере представления, чтобы увидеть, включены ли они:

if([CLLocationManager locationServicesEnabled]) {
   //Do something now
}

Этот тест всегда проходит по какой-то причине. Если я пробую доступ к услугам местоположения, я получаю kclerrordeenied ошибку для менеджера местоположения. Что дает?

Я использую неправильный тест?

Это было полезно?

Решение

То местоположение Способ класса проверяет только глобальные настройки для сервисов местоположения. AFAIK, нет возможности проверить, если ваше приложение явно отказано. Вам придется дождаться запроса на местоположение, чтобы провалиться и использовать метод CllocationManagerDelegate locationmanager: didfailwitherror: делать все, что вам нужно. Например:

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

    NSString *errorString;
    [manager stopUpdatingLocation];
    NSLog(@"Error: %@",[error localizedDescription]);
    switch([error code]) {
        case kCLErrorDenied:
            //Access denied by user
            errorString = @"Access to Location Services denied by user";
            //Do something...
            break;
        case kCLErrorLocationUnknown:
            //Probably temporary...
            errorString = @"Location data unavailable";
            //Do something else...
            break;
        default:
            errorString = @"An unknown error has occurred";
            break;
        }
    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
}

Увидеть документацию на константах Clerror в Ссылка класса CllocationManager для получения дополнительных вариантов.

Другие советы

iOS 4.2 теперь позволяет определить, было ли услуги местоположения отказано через CllocationManager +authorizationStatus метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top