引用: import CoreLocation
10年积累的成都网站制作、网站设计、外贸网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有精河免费网站建设让你可以放心的选择与我们合作。
//如果是ios8.0以后,在想请求用户的位置信息,需要主动的请求授权,系统不会再自动弹出一个窗口
lazy var locationM: CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
// 请求的是前台定位授权
//默认情况,只能在前台获取用户位置信息如果想想要在后台也获取用户位那么必须勾选后台模式location updates
//效果在后台确实可以获取到位置信息,但是屏幕上方会出现一个蓝色的横幅,不断提醒用户,当前APP正在使用你的位置
if #available(iOS 8.0, *) {
locationM.requestWhenInUseAuthorization()
// 如果在ios9.0以后, 想要在后台获取用户位置,
// 如果当前的授权状态是前台定位授权, 那么你需要勾选后台模式 location updates, 还要额外的设置以下属性为true
// 注意: 如果设置这个属性为true, 那么必须勾选后台模式
if #available(iOS 9.0, *) {
locationM.allowsBackgroundLocationUpdates =true
}
//前后台定位授权
//如果当前的授权状态是前后台定位授权,那么默认情况下,就可以在后台获取用户位置信息,不需要勾选后台模式location updates
// locationM.requestAlwaysAuthorization()
}
// 设置过滤距离
// 每隔100米定位一次
// 1 111KM/100M
//如果最新的位置距离上一次的位置之间的物理距离,大于这个值,就会通过代理来告诉我们最新的位置数据
locationM.distanceFilter = 100
// 定位精确度
// kCLLocationAccuracyBestForNavigation // 最适合导航
// kCLLocationAccuracyBest; // 最好的
// kCLLocationAccuracyNearestTenMeters; // 附近10米
// kCLLocationAccuracyHundredMeters; // 附近100米
// kCLLocationAccuracyKilometer; // 附近1000米
// kCLLocationAccuracyThreeKilometers; // 附近3000米
//经验:如果定位的精确度越高,那么越耗电,而且定位时间越长
//
locationM.desiredAccuracy =kCLLocationAccuracyBest
return locationM
}()
override func touchesBegan(touches: Set
locationM.startUpdatingLocation()
}
}
extensionViewController:CLLocationManagerDelegate {
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("已经获取到位置信息")
//获取用户当前所在的城市,切换到奥对应城市 1
//如果想要定位一次,那么可以在定位到之后,停止定位
// locationM.stopUpdatingLocation()
}
/**
授权状态发生改变时调用
- parameter manager: 位置管理者
- parameter status: 状态
*/
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
switch status {
case .NotDetermined:
print("用户没有决定")
case .Restricted:
print("受限制")
case .AuthorizedWhenInUse:
print("前台定位授权")
case .AuthorizedAlways:
print("前后台定位授权")
case .Denied:
// print("拒绝")
//判断当前设备是否支持定位,并且定位服务是否开启
ifCLLocationManager.locationServicesEnabled() {
print("真正被拒绝")
// 手动通过代码, 来跳转到设置界面
if #available(iOS 8.0, *) {
let url =NSURL(string:UIApplicationOpenSettingsURLString)
if UIApplication.sharedApplication().canOpenURL(url!) {
UIApplication.sharedApplication().openURL(url!)
}
}
}else {
//当我们在app内部想要访问用户位置,但是当前的定位服务是关闭状态,那么系统会自动弹出一个窗口,快捷跳转到设置界面,让用户设置
print("定位服务应该打开")
}
default:
print("none")
}
}