ОБЪЕДИНЕНИЕ запросить разрешение еще раз - PullRequest
16 голосов
/ 22 ноября 2010

В настоящее время мое приложение запрашивает разрешение на использование текущего местоположения только один раз. Если пользователь не разрешает, он не будет спрашивать снова, пока не сбросит предупреждение о местоположении в общих настройках. Я хотел бы дать пользователю возможность из приложения предоставить это разрешение позже. Другими словами, диалог должен появиться снова, если он нажмет определенную кнопку. Возможно ли это?

Спасибо за ваш совет.

Ответы [ 2 ]

15 голосов
/ 07 сентября 2012

[CLLocationManager locationServicesEnabled] просто сообщает вам, включены ли службы определения местоположения на устройстве.

в соответствии с этим документом.

[CLLocationManager authorizationStatus]

вернет один из этих

typedef enum {
   kCLAuthorizationStatusNotDetermined = 0,
   kCLAuthorizationStatusRestricted,
   kCLAuthorizationStatusDenied,
   kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;

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

9 голосов
/ 30 июня 2011

Новый ответ: теперь в iOS 8 вы можете программно открыть приложение настроек устройства:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];

Если вы поддерживаете более ранние версии iOS и хотите убедиться, что это можно обработать, сделайте следующее:

if (&UIApplicationOpenSettingsURLString != NULL) {
   NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
   [[UIApplication sharedApplication] openURL:url];
}
else {
  //Earlier iOS version
}

Старый ответ: я не знаю, как заставить родное всплывающее окно появиться (и позволить пользователю перейти на страницу настроек).

Вы можете использовать следующий метод, чтобы определить, разрешил ли пользователь службы определения местоположения для вашего приложения: CLLocationManager:

+(CLAuthorizationStatus)authorizationStatus

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

+(BOOL)locationServicesEnabled
...