使用する位置情報サービスの許可を求めるには:
yourSharedLocationManager.requestWhenInUseAuthorization()
ステータスが現在不明の場合は、ユーザーにアクセスを許可するように求めるアラートが表示されます。アクセスが拒否された場合、アプリはCLLocationManagerDelegateで通知されます。同様に、許可が拒否された場合は、ここで更新されます。
現在の権限を判断するために確認する必要がある2つの個別のステータスがあります。
- ユーザーが一般的な位置情報サービスを有効にしているかどうか
CLLocationManager.locationServicesEnabled()
CLLocationManager.authorizationStatus() == .authorizedWhenInUse
拡張機能を追加できるのは便利なオプションです。
extension CLLocationManager {
static func authorizedToRequestLocation() -> Bool {
return CLLocationManager.locationServicesEnabled() &&
(CLLocationManager.authorizationStatus() == .authorizedAlways || CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
}
ここでは、ユーザーが最初に道順を要求したときにアクセスされています。
private func requestUserLocation() {
locationManager.requestWhenInUseAuthorization()
if CLLocationManager.authorizedToRequestLocation() {
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
locationManager.requestLocation()
} else {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
代理人は次のとおりです。
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if !CLLocationManager.authorizedToRequestLocation() {
showAlertNoLocation(locationError: .invalidPermissions)
}
}
manager.locationServicesEnabled()
、CLLocationManager.loationServicesEnabled()
Solvedではあり ませんでした 。