iOS Swift 判断应用定位权限

/ Java / 没有评论 / 2243浏览

iOS Swift 判断应用定位权限

最近做到地图定位的东西,在搜索应用定位权限判断的这一块儿的时候搜到了许多答案,现在把自己的一些理解说一下,有错误请大家指正。iOS的应用定位权限有种状态

  1. .NotDetermined 表示用户还未对该应用的定位权限做出选择,但是一般如果用到定位,一进入app的时候就会自动弹出提示框要用户选择启用或者禁止,这个状态应该说进入程序后就不存在了
  2. .Restricted 表示GPS功能受限於某些限制,无法使用定位服务,例如 parental controls(这里没想到该状态的应用场景)该状态用户无法改变
  3. .Denied 表示用户拒绝该应用使用定位服务(也可能是定位服务总开关处于关闭状态,CLLocationManager.authorizationStatus()获取的是应用的授权状态,但是当定位服务总开关处于关闭状态的时候,所有应用的定位服务都为关闭状态 )
  4. .AuthorizedAlways(iOS 8.0) 表示用户授权该应用可永久使用定位权限
  5. .AuthorizedWhenInUse(iOS 8.0) 表示用户授权该应用或其功能在屏幕上显示时才能访问用户的位置
  6. 还有一个判断设备定位权限总开关的方法 CLLocationManager.locationServicesEnabled() 返回值是一个Bool类型,true为开启,false为关闭

理清了上面每种状态的意义,我们便可以根据当前的状态来判断当前应用的定位权限.

思路

if(CLLocationManager.authorizationStatus() != .Denied) {
  print("应用拥有定位权限")
}else {
  let aleat = AlertController(title: "打开定位开关", message:"定位服务未开启,请进入系统设置>隐私>定位服务中打开开关,并允许xxx使用定位服务", preferredStyle: .Alert)
  let tempAction = UIAlertAction(title: "取消", style: .Cancel) {
    (action) in
  }
  let callAction = UIAlertAction(title: "立即设置", style: .Default) { 
    (action) in
    let url = NSURL.init(string: UIApplicationOpenSettingsURLString)
    if(UIApplication.sharedApplication().canOpenURL(url!)) {
      UIApplication.sharedApplication().openURL(url!)
    }
  }
  aleat.addAction(tempAction)
  aleat.addAction(callAction)
  self.presentViewController(aleat, animated: true, completion: nil)
}