iOS 8.0 之前获取用户的位置信息
- 默认情况下,只能在前台获取用户位置信息,如果在后台也想要获取用户的位置信息,需要开启后台模式。
iOS 8.0之后,iOS 9.0之前想要获取用户的位置信息
- 需要主动请求授权
- 前台定位授权,必须在info.plist文件中配置对应的key
- NSLocationWhenInUseUsageDescription
- 默认情况下只能在前台获取用户的位置信息,如果想要在后台也获取用户的位置信息,需要开启:后台模式,勾选,location updates
- 在后台获取用户的位置信息,会在顶部显示蓝色横幅,实时提示用户该APP在获取你的位置信息,点击蓝色横幅则会打开该APP
- 前后台定位授权,必须在info.plist文件中配置对应的key
- NSLocationAlwaysUsageDescription
- 在前台和后台都能够获取用户的位置信息,在后台获取用户的位置信息,不需要开启后台模式
iOS 9.0 之后获取用户的位置信息
- 前台定位授权,和iOS 8.0之后的基本操作一样,想要在后台获取用户的位置信息,需要满足两个条件
- 需要开启后台模式: location updates
- 必须允许后台获取用户的位置信息
- 注意点:如果允许后台获取用户的位置信息,必须勾选后台模式,否则会造成程序崩溃
- 前后台定位授权,和iOS 8.0之后的操作一样
import UIKit
import CoreLocation
class ViewController: UIViewController {
lazy var locationM : CLLocationManager = {
let locationM = CLLocationManager()
locationM.delegate = self
if #available(iOS 8.0, *) {
//前台的定位授权请求申请
locationM.requestWhenInUseAuthorization()
if #available(iOS 9.0, *) {
//允许在后台运行
locationM.allowsBackgroundLocationUpdates = true
}
//前后台的定位授权申请
// iOS8.0之后的前后台定位授权没有任何变化
//locationM.requestAlwaysAuthorization()
}
return locationM
}()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// 开始定位
// 调用这个方法,就会不断地获取用户的位置信息
locationM.startUpdatingLocation()
}
}
extension ViewController : CLLocationManagerDelegate {
/// 当获取到用户的位置的时候会来到该方法
///
/// - Parameters:
/// - manager: 位置管理者
/// - locations: 位置数组
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("定位到了")
}
}