Подтвердить что ты не робот

Как заставить пользователя включить службы геопозиционирования...

Я хочу иметь те же функциональные возможности, что и приложение "Карта", когда пользователю предлагается каждый раз при нажатии кнопки "Текущее местоположение", чтобы включить свои службы определения местоположения, если они отключены:

  • Отключить службы определения местоположения
  • Пользователь нажимает кнопку 'getCurrentLocation'
  • Приложение пытается получить местоположение с помощью CLLocationManager
  • Пользователь получает сообщение "Включить службы размещения...", в котором отображаются кнопки "Настройки" и "Отмена".
  • Отключает пользователя "Отменить"
  • Пользователь снова нажимает кнопку '' getCurrentLocation '
  • Приложение пытается получить местоположение с помощью CLLocationManager снова
  • Пользователь больше не получает сообщение "Включить службы размещения..."

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

Если я сделаю свое собственное оповещение, я не могу получить ту же функциональность кнопок "Настройки". Кроме того, я не хочу, чтобы пользователь видел несколько предупреждений, которые выглядят одинаково.

Любые идеи?

4b9b3361

Ответ 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.

Я бы сильно отговорил вас от этого, но вы можете попробовать снова запустить службу, если пользователь говорит "нет", и пользователь будет снова задан. Большинство пользователей будут ненавидеть вас за это.