Как узнать, какая кнопка оповещения была нажата пользователем для CLLocationManager? - PullRequest
2 голосов
/ 02 февраля 2012

CLLocationManager выдает предупреждение

"Имя приложения" Хотите использовать ваше местоположение

, которая предлагает две кнопки, OK и Не разрешать . Как узнать, какую из кнопок выбрал пользователь?

Ответы [ 2 ]

5 голосов
/ 02 февраля 2012

Реализация CLLocationManagerDelegate Protocol

locationManager: didChangeAuthorizationStatus:

Сообщает делегату, что статус авторизации для приложения изменился.

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

Параметры

Менеджер

 The location manager object reporting the event.

состояние

The new authorization status for the application.

Обсуждение

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

5 голосов
/ 02 февраля 2012

Когда вы нажимаете кнопку Не разрешать

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
будет вызываться с kCLAuthorizationStatusDenied исключением. Вы можете написать свой внутри него.

Также см .:

kCLAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
kCLAuthorizationStatusRestricted,        // This application is not authorized to use location services.  Due
                                             // to active restrictions on location services, the user cannot change
                                             // this status, and may not have personally denied authorization
kCLAuthorizationStatusDenied,            // User has explicitly denied authorization for this application, or
                                             // location services are disabled in Settings
kCLAuthorizationStatusAuthorized         // User has authorized this application to use location services

Пример:

если пользователь нажимает на разрешить, то

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{
      [self refreshYourView];
}

Если клики не позволяют

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
{
    if ([error code]== kCLAuthorizationStatusDenied) 
    {
         UIAlertView *alert;
    alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"User has clicked don't allow button." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];

     }
}

РЕДАКТИРОВАТЬ

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

Вы можете использовать это на iOS 5.0 и более поздних версиях:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

в вашем приложении, чтобы открыть приложение Настройки.

...