2010-07-29 2 views
1

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

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

Однако я хотел бы, чтобы пользователь мог изменить свое мнение об использовании служб определения местоположения, поэтому у меня есть кнопка, позволяющая им вернуться к использованию 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; 
} 

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

+0

хороший вопрос. У меня такая же проблема. – hop

ответ

0

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

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

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

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

Смежные вопросы