Как предложить пользователю снова включить Location Services ... - PullRequest
17 голосов
/ 14 мая 2011

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

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

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

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

Есть идеи?

Ответы [ 3 ]

22 голосов
/ 10 сентября 2014

Новое в iOS 8 - константа с именем UIApplicationOpenSettingsURLString.

Из «Что нового в iOS» документ под UIKit - это строка:

Вы можете перенаправить пользователя непосредственно к настройкам приложения в приложении «Настройки». Передайте константу UIApplicationOpenSettingsURLString в openURL: метод класса UIApplication.

Из документации Apple :

UIApplicationOpenSettingsURLString

Используется для создания URL, который вы можете передать методу openURL :. Когда вы открываете URL, созданный из этой строки, система запускает приложение «Настройки» и отображает пользовательские настройки приложения, если они есть.

Вы можете передать это в openURL: метод UIApplication. Это может выглядеть примерно так:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];
19 голосов
/ 13 февраля 2012

Если вы хотите направить пользователя обратно на экран «Службы определения местоположения» в приложении «Настройки», вы можете сделать это, отправив ему специальный URL-адрес, например:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
10 голосов
/ 14 мая 2011

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

Но если вы хотите, просто запустите службу определения местоположения, и пользователю будет предложено запустить ее снова. Если пользователь выберет место запроса, о вашем делегате начнут поступать сообщения, как обычно. Если пользователь вместо этого отклонит ваш запрос, вы получите обратный вызов для метода делегата locationManager:didFailWithError:. Ошибка будет иметь код ошибки kCLErrorDenied.

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

...