Менеджер CLLocation не запрашивает пользователя - PullRequest
1 голос
/ 29 июля 2010

Я использую метод для создания менеджера местоположений, если он не существует, и запуска его.Он проверяет, отключены ли у пользователя службы определения местоположения, и соблюдает это, если только BOOL не предоставлен для запуска служб в любом случае.Метод возвращает BOOL, чтобы указать, были запущены службы или нет.

Это отлично работает для запуска службы и запроса пользователя в первый раз.Если они коснутся, разрешите все продолжить как обычно, а если коснитесь, не разрешите, я представлю представление для ввода местоположения вручную.

Однако я бы хотел, чтобы пользователь мог изменить свое мнение об использовании служб определения местоположения, поэтому яесть кнопка, чтобы позволить им вернуться к использованию GPS.Он снова вызывает ту же функцию, но на этот раз игнорирует предпочтения пользователей служб определения местоположения.Я полагаю, что это должно побудить пользователя снова разрешить / запретить, но вместо этого я получаю немедленный код ошибки kCLDenied.

На основе http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11 Я ожидаю другое приглашение пользователя, а не немедленную ошибку.

- (BOOL)startLocationServices:(BOOL)ignorePrefs
{
//    
//    /*UNREVISEDCOMMENTS*/
//    
if (locationManager == nil)
{
    if ([CLLocationManager locationServicesEnabled] || ignorePrefs)
    {
        locationManager    =    [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
        [locationManager setDistanceFilter:10.0];
    }
    else
    {
        return NO;
    }
}
[locationManager startUpdatingLocation];
return YES;
}

(Мой делегат диспетчера местоположений освобождает и устанавливает диспетчер местоположений на ноль, если получена отклоненная ошибка.)

1 Ответ

0 голосов
/ 29 мая 2011

Пользователь не получит другое приглашение. Это просто способ, которым iPhone справляется.

Вы также должны различать:

  • Пользователь отключает службы определения местоположения из приложения «Настройки» (этот статус возвращается методом + (BOOL)locationServicesEnabled )
  • Пользователь отказался от использования отслеживания местоположения для текущего приложения (+ (CLAuthorizationStatus)authorizationStatus метод возвращает текущий статус)

Я бы проверил оба метода и в случае показа предупреждения с сообщением о деактивированных службах определения местоположения.

...