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

#objective-c #ios #cocoa-touch #core-location

#цель-c #iOS #cocoa-touch #ядро-местоположение

Вопрос:

Я делаю это руководство, которое возвращает координаты GPS. Когда я запускаю приложение на iPhone, мне сначала предлагается UIAlertView запросить разрешение на доступ к моим координатам GPS.

Мне нужно знать, откуда это UIAlertView выбрасывается? Это из ОС? Можем ли мы использовать этот метод? Когда пользователь нажимает «Разрешить» или «Не разрешать», могу ли я распечатать его выбор на консоли?

Как я могу сделать это программно? Есть ли событие для этого?

Ответ №1:

Это предупреждение отображается операционной системой. Использование API на основе местоположения должно быть разрешено пользователем. Вы можете запросить CLLocationManager текущее authorizationStatus и получать уведомления об изменении статуса (будет вызван метод делегирования). Обратите внимание, что пользователь также может отключить службы определения местоположения позже в приложении «Настройки».

Комментарии:

1. Хорошо, например, скажем, что пользователь нажимает No или не разрешает разрешение на доступ к местоположению GPS. но позже пользователь передумал, и ему требуется авторизовать разрешение на доступ к GPS. В таком случае, как мне UIAlertview снова вызвать?

2. @sharon — Ты этого не делаешь. Вы не вызывали его в первый раз. Вы можете следить за изменениями в вашей авторизации, поэтому вы можете отказаться от функций определения местоположения, если хотите. Но вы не можете снова запросить у пользователя разрешение. Конечно, если вы заметите, что у вас нет разрешения, вы всегда можете запустить СОБСТВЕННОЕ оповещение об этом. Но им придется копаться в своих настройках, чтобы включить ваши разрешения, вы не можете отправить их туда напрямую.

3. Начиная с iOS5, вы можете создать свою собственную кнопку «Настройки» и вызвать ее: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@»prefs:root= General»]]; чтобы включить прямой доступ к настройкам.

4. предложение @ paiego — похоже, что способ iOS 8 сделать это: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

Ответ №2:

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

Редактировать: при первой попытке вашего приложения использовать службу пользователю будет предложено. Если пользователь ответит «Нет», ваше приложение не сможет использовать службу, если они не перейдут в Настройки-> Общие-> Службы определения местоположения и не изменят настройки для вашего приложения.

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

Комментарии:

1. Хорошо, например, скажем, что пользователь нажимает No или не разрешает разрешение на доступ к местоположению GPS. но позже пользователь передумал, и ему требуется авторизовать разрешение на доступ к GPS. В таком случае, как мне UIAlertview снова вызвать?

2. Я полагаю, что пользователю придется перейти на экран настроек iPhone и изменить выбранный параметр для вашего приложения.