Swift - 如果未授予核心位置请求权限
Posted
技术标签:
【中文标题】Swift - 如果未授予核心位置请求权限【英文标题】:Swift - Core location request permission if not granted 【发布时间】:2016-11-25 11:27:04 【问题描述】:如果用户在第一次被询问时被拒绝,有什么方法可以要求用户授予位置检测权限?
【问题讨论】:
【参考方案1】:要获取用户的当前位置,您需要声明:
let locationManager = CLLocationManager()
在 viewDidLoad() 中:
// Ask for Authorisation from the User.
self.locationManager.requestAlwaysAuthorization()
// For use in foreground
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
然后在 CLLocationManagerDelegate 方法中可以获取用户当前的位置坐标:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
var locValue:CLLocationCoordinate2D = manager.location.coordinate
print("locations = \(locValue.latitude) \(locValue.longitude)")
如果用户拒绝了该位置,则让他选择从设置中更改位置权限:
func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
print("error::: \(error)")
locationManager.stopUpdatingLocation()
let alert = UIAlertController(title: "Settings", message: "Allow location from settings", preferredStyle: UIAlertControllerStyle.Alert)
self.presentViewController(alert, animated: true, completion: nil)
alert.addAction(UIAlertAction(title: TextMessages().callAlertTitle, style: .Default, handler: action in
switch action.style
case .Default: UIApplication.sharedApplication().openURL(NSURL(string: UIApplicationOpenSettingsURLString)!)
case .Cancel: print("cancel")
case .Destructive: print("destructive")
))
注意:
确保将隐私密钥 (NSLocationAlwaysAndWhenInUseUsageDescription) 添加到 Info.plist 文件中。
【讨论】:
并确保将隐私密钥 (NSLocationAlwaysAndWhenInUseUsageDescription) 添加到 plist 文件中。 @LahiruPinto 是的,谢谢。 您可以检查当前状态是否被CLLocationManager.authorizationStatus() == .denied
拒绝【参考方案2】:
不,您可以在应用内的提醒中提醒他们,例如“为了更好地使用,我们建议您授予我们使用您的位置的权限”。并添加“转到设置”按钮,将用户重定向到您的应用程序的位置权限。
【讨论】:
这是认真的答案吗? @NumanKaraaslan 是的。如果您仔细阅读,您会发现这是已接受答案的简短变体。以上是关于Swift - 如果未授予核心位置请求权限的主要内容,如果未能解决你的问题,请参考以下文章