Как заставить пользователя включить службы геопозиционирования...
Я хочу иметь те же функциональные возможности, что и приложение "Карта", когда пользователю предлагается каждый раз при нажатии кнопки "Текущее местоположение", чтобы включить свои службы определения местоположения, если они отключены:
- Отключить службы определения местоположения
- Пользователь нажимает кнопку 'getCurrentLocation'
- Приложение пытается получить местоположение с помощью CLLocationManager
- Пользователь получает сообщение "Включить службы размещения...", в котором отображаются кнопки "Настройки" и "Отмена".
- Отключает пользователя "Отменить"
- Пользователь снова нажимает кнопку '' getCurrentLocation '
- Приложение пытается получить местоположение с помощью CLLocationManager снова
- Пользователь больше не получает сообщение "Включить службы размещения..."
В приложении "Карта" пользователь каждый раз получает сообщение "Включить службы местоположения...". Как я могу заставить приложение сделать то же самое? Я сделал пользователя. Я использую новый экземпляр CLLocationManager, если это была проблема, но это не так. Я не вижу никаких настроек, которые могли бы повлиять на это.
Если я сделаю свое собственное оповещение, я не могу получить ту же функциональность кнопок "Настройки". Кроме того, я не хочу, чтобы пользователь видел несколько предупреждений, которые выглядят одинаково.
Любые идеи?
Ответы
Ответ 1
Новое в iOS 8 есть константа, называемая UIApplicationOpenSettingsURLString
.
Из "Что нового в iOS" документ под UIKit является строкой:
Пользователь может перейти непосредственно к настройкам, связанным с приложением, в приложении "Настройки". Передайте константу UIApplicationOpenSettingsURLString
в метод openURL: класс UIApplication.
От Apple documentation:
UIApplicationOpenSettingsURLString
Используется для создания URL-адреса, который вы можете передать методу openURL:. Когда вы открываете URL-адрес, построенный из этой строки, система запускает приложение "Настройки" и отображает пользовательские настройки приложений, если он есть.
Вы можете передать это в метод openURL: UIApplication. Это может выглядеть примерно так:
NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:settings])
[[UIApplication sharedApplication] openURL:settings];
Ответ 2
Если вы хотите перенаправить пользователя на экран "Службы местоположения" в приложении "Настройки", вы можете сделать это, отправив их на специальный URL-адрес, например:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
Ответ 3
Вы можете запросить общий экземпляр CLLocationManager
, если служба определения местоположения включена. Правильный способ состоит в том, чтобы уважать выбор пользователей для отключения служб определения местоположения.
Но если вы хотите, просто запустите службу определения местоположения, и пользователю будет предложено запустить его снова. Если пользователь захочет в местах запроса, начнет сообщаться с вашим делегатом, как обычно. Если пользователь вместо этого отклонит ваш запрос, вы получите обратный вызов отказа к методу делегата locationManager:didFailWithError:
. Ошибка будет иметь код ошибки kCLErrorDenied
.
Я бы сильно отговорил вас от этого, но вы можете попробовать снова запустить службу, если пользователь говорит "нет", и пользователь будет снова задан. Большинство пользователей будут ненавидеть вас за это.