感謝以下Thomas的建議我從原始請求修改了我的代碼。我想知道如果我試圖做一些不可能的事情,或者如果不行,我該如何做到這一點。在應用程序位置設置更改後重新評估正在運行的應用程序中的CLLocationManager.authorizationStatus
如果用戶沒有授權位置服務,我通過一個提示與「打開設置」按鈕來更改應用程序的位置設置。這工作。但是,從設置返回到應用程序,我想確認是否進行了更改並激活位置服務。這可以做到嗎?下面的關閉成功地讓用戶進入應用程序的設置,用戶可以進行更改,用戶可以返回,但是當用戶按下「打開設置」(在設置被更改之前)時觸發關閉。順便說一句:如果有更好的方法來處理用戶批准應用程序當前未授權的位置首選項,我會很感激建議。謝謝!
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'方法。當視圖控制器完成呈現時,完成將會觸發。我的描述中有點不清楚,但聽起來您希望在用戶選擇了其中一個警報選項後觸發此操作,因此此代碼應位於UIAlertAction的完成處理程序之一中。 –
謝謝,托馬斯。這很有幫助。當用戶點擊「打開設置」按鈕時,我可以移動閉包並執行它。但我想知道我是否在問不可能的事情。我希望在用戶通過以下應用程序從應用程序設置返回到應用程序時再次測試授權:UIApplicationOpenSettingsURLString。當用戶從更改設置返回時,是否可以以某種方式觸發代碼並檢查我們現在是否具有授權?再次感謝您的建議! – Gallaugher