Как я могу предложить пользователю включить службы определения местоположения после того, как пользователь отказался от их использования - PullRequest
69 голосов
/ 04 февраля 2011

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

Мне нужно поведение встроенного приложения Карт:

  1. Сброс предупреждений о местоположении в меню «Настройки»> «Основные»> «Сброс»> «Сброс предупреждений о местоположении».
  2. Запустите приложение Карт.
  3. Нажмите кнопку «Текущее местоположение» в левом нижнем углу.
  4. Запросы карт с «« Карты »хотели бы использовать ваше текущее местоположение» | "Не разрешать" | "Разрешить".
  5. Выберите опцию «Не разрешать».
  6. Снова нажмите кнопку «Текущее местоположение» в левом нижнем углу.
  7. Карты запрашивают «Включить службы определения местоположения, чтобы разрешить« Карточкам »определять ваше местоположение» | «Настройки» | "Отменить".

В моем собственном приложении тот же основной поток приводит к тому, что мой CLLocationManagerDelegate -locationManager: didFailWithError: метод, вызываемый с ошибкой kCLErrorDenied на последнем этапе, и пользователю не предоставляется возможность открыть приложение «Настройки» для его исправления.

Я мог бы отобразить свое собственное предупреждение в ответ на ошибку, но у него не было бы возможности запустить приложение «Настройки», как предупреждение, которое ОС может выдавать при использовании встроенного приложения «Карты».

Есть ли в классе CLLocationManager что-то, чего мне не хватает, что могло бы дать мне такое поведение?

Ответы [ 11 ]

0 голосов
/ 05 апреля 2016

Расширение Swift 3 для создания настроек оповещения контроллера:

Фонд импорта

extension UIAlertController {
    func createSettingsAlertController(title: String, message: String) -> UIAlertController {
        let controller = UIAlertController(title: title, message: message, preferredStyle: .alert)

        let cancelAction = UIAlertAction(title: NSLocalizedString("Cancel", comment:"" ), style: .cancel, handler: nil)
        let settingsAction = UIAlertAction(title: NSLocalizedString("Settings", comment:"" ), style: .default, handler: { action in
            UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
        })
        controller.addAction(cancelAction)
        controller.addAction(settingsAction)

        return controller
    }
}
...