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 - 如果未授予核心位置请求权限的主要内容,如果未能解决你的问题,请参考以下文章

Android 11 用户无法授予后台位置权限?

Android Studio 中未授予 Action_Call 权限

在调试时授予位置权限,但在 android 系统上未授予

Instagram API“关系”权限未授予

您如何在没有用户共享/授予权限的情况下使用核心位置?

在 XCTest 案例中处理对 CLLocationManager 授权的请求