下記のトーマスのアドバイスのおかげで、元のリクエストからコードを修正しました。不可能なことをしようとしているのか、そうでないのか、私はこれをどうやって達成できるのか疑問に思います。アプリロケーション設定の変更後にアプリを実行する際にCLLocationManager.authorizationStatusを再評価してください
ユーザーが位置情報サービスを承認していない場合は、「設定を開く」ボタンを使用して警告を表示して、アプリの位置設定を変更します。これは機能します。しかし、設定からアプリに戻ったときに、変更が行われたかどうかを認識し、位置情報サービスを有効にしたいと思います。これはできますか?以下のクロージャは、ユーザーがアプリケーションの設定に成功し、ユーザーは変更を加えることができ、ユーザーは戻ることができますが、設定が変更される前にユーザーが「設定を開く」を押すとクロージャが実行されます。 BTW:アプリの現在の権限のない場所の設定を承認するためにユーザを微調整するより良い方法がある場合は、アドバイスをお願いします。ありがとう!
私はここに拡張コードは、私が欲しいものを実現考えるlocationManager.requestWhenInUseAuthorization() // request authorization
let authStatus = CLLocationManager.authorizationStatus()
switch authStatus {
case .denied:
let alertController = UIAlertController(title: "Background Location Access Disabled", message: "In order to show the location weather forecast, please open this app's settings and set location access to 'While Using'.", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alertController.addAction(UIAlertAction(title: "Open Settings", style: .`default`, handler: { action in
if #available(iOS 10.0, *) {
let settingsURL = URL(string: UIApplicationOpenSettingsURLString)!
UIApplication.shared.open(settingsURL, options: [:], completionHandler: {(success) in
print("*** Success closure fires")
let newAuthStatus = CLLocationManager.authorizationStatus()
switch newAuthStatus {
case .authorizedWhenInUse:
self.locationManager.startUpdatingLocation()
default:
print("Not .authorizedWhenInUse")
}
})
} else {
if let url = NSURL(string:UIApplicationOpenSettingsURLString) {
UIApplication.shared.openURL(url as URL)
}
}
}))
self.present(alertController, animated: true, completion: nil)
case .authorizedWhenInUse, .authorizedAlways:
locationManager.startUpdatingLocation()
case .restricted :
print("App is restricted, likely via parental controls.")
default:
print("UH!! WHAT OTHER CASES ARE THERE? ")
}
私は何を誤解していることは 'present'方法だと思います。ビューコントローラーの表示が完了すると、完成が完了します。私はあなたの説明から少しはっきりしていませんが、ユーザーが警告オプションの1つを選択した後にこのアクションを開始するように思えます。したがって、このコードはUIAlertActionの完了ハンドラの1つになければなりません。 –
ありがとう、トーマス。これは役に立ちました。私はクロージャーを動かすことができました。ユーザーが「設定を開く」ボタンをクリックしたときに実行されました。しかし、私は不可能に頼んでいるのだろうかと思っています。ユーザーがアプリの設定からアプリに戻ったときに、UIApplicationOpenSettingsURLStringを使ってもう一度認証をテストしたいと考えています。ユーザーが設定を変更して戻ってきたときに何らかの形でコードを実行することができますか?あなたのアドバイスをもう一度おねがいします – Gallaugher