2010-11-22 3 views
16

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

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

+0

Возможно нет. Это необходимо, чтобы сбросить предупреждения о местоположении. – ryyst

ответ

9

Новый Ответ: Сейчас в прошивке 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 
+0

Это только частично точно. locationServicesEnabled сообщит вам только о настройках устройств, а не разрешениях на размещение вашего приложения. – Acey

14

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

согласно this документ.

[CLLocationManager authorizationStatus]

будет возвращать один из этих

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

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

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