2012-06-16 3 views
2

В основном, когда мое приложение запускается в первый раз, появляется запрос Enable Location Services. Когда пользователь нажимает «Разрешить», я хотел бы начать обновление местоположения пользователя и масштабирования в регионе.Как обрабатывать Включить службы определения местоположения после выбора пользователем разрешения?

В моем представленииDidLoad Я запускаю диспетчер местоположений, но, к сожалению, представление загружается, прежде чем пользователь сможет нажать «Разрешить». Все работает нормально при втором запуске приложения, потому что пользователь уже допустил бы службы определения местоположения.

Мой вопрос: как я могу захватить событие нажатия на «Разрешить», чтобы я мог запускать код для масштабирования в регионе?

Я попытался использовать -(void)locationManager:didChangeAuthorizationStatus:, но, похоже, этот метод делегата не вызвал, когда разрешает пользователь.

Надеюсь, что это имеет смысл. Я очень новичок в этом.

ответ

5

Насколько я знаю, вы не можете, но вам не нужно фиксировать это событие, потому что вы не сможете увеличить масштаб до определенного места, прежде чем получить координаты этого местоположения. Ваше приложение отлично работает во втором запуске, поскольку оно использует данные кэшированного местоположения с первого запуска. Итак, вам нужно запустить код масштабирования после получения новых действительных координат. Если вы используете CLLocationManager, чем смотреть на

– locationManager:didUpdateToLocation:fromLocation: 

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

locationManager:didFailWithError: 

С соответствующей ошибкой.

Если вы используете MKMapKit, чем в MKMapView делегатом реализовать метод

– mapViewWillStartLocatingUser: 

сосредоточиться на текущей позиции пользователя. обрабатывать отказ осуществлять

– mapView:didFailToLocateUserWithError: 

Ссылки на соответствующие компании Apple документации:

CLLocationManager

CLLocationManagerDelegate

MKMapViewDelegate

1

Здесь он работает просто отлично. Я запускаю диспетчер местоположений, затем я установил его делегат и запустил его. Когда появляется всплывающее окно, -(void)locationManager:didChangeAuthorizationStatus: вызывается с CLAuthorizationStatus равным kCLAuthorizationStatusNotDetermined. Если я нажму «Dont 'Allow», он снова будет вызван с CLAuthorizationStatus равным kCLAuthorizationStatusDenied. При нажатии «Разрешить» он вызывается с CLAuthorizationStatus равным kCLAuthorizationStatusAuthorized. Проверьте, правильно ли установлен ваш делегат.

1

Вы можете справиться с этим, как это:

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

    switch([CLLocationManager authorizationStatus]) 
    { 
     case kCLAuthorizationStatusAuthorized: 
      NSLog(@"Location services authorised by user"); 
      break; 

     case kCLAuthorizationStatusDenied: 
      NSLog(@"Location services denied by user"); 
      break; 

     case kCLAuthorizationStatusRestricted: 
      NSLog(@"Parental controls restrict location services"); 
      break; 

     case kCLAuthorizationStatusNotDetermined: 
      NSLog(@"Unable to determine, possibly not available"); 
      break; 
    } 
} 
Смежные вопросы