使用 CLLocationManager 获取用户位置
1 - 在项目中包含 CoreLocation.framework; 这可以通过点击:
root directory -> build phases -> Link Binary With Libraries
单击(+)按钮,查找 CoreLocation.framework 并单击添加。
2-修改 info.plist 文件,通过将其作为源代码打开来请求使用用户位置的权限。在标记下添加以下任一键:值对,以在应用程序使用时询问用户位置的使用情况:
<key>NSLocationWhenInUseUsageDescription</key>
<string>message to display when asking for permission</string>
3-将 CoreLocation 导入将使用它的 ViewController。
import CoreLocation
4-确保 ViewController 符合 CLLocationManagerDelagate 协议
class ViewController: UIViewController,CLLocationManagerDelegate {}
完成这些步骤后,我们可以创建一个 CLLocationManager 对象作为实例变量,并在 ViewController 中使用它。
var manager:CLLocationManager!
我们这里不使用’let’,因为我们将修改管理器以指定其委托,更新事件之前的最小距离及其准确性
//initialize the manager
manager = CLLocationManager()
//specify delegate
manager.delegate = self
//set the minimum distance the phone needs to move before an update event is triggered (for example: 100 meters)
manager.distanceFilter = 100
//set Accuracy to any of the following depending on your use case
//let kCLLocationAccuracyBestForNavigation: CLLocationAccuracy
//let kCLLocationAccuracyBest: CLLocationAccuracy
//let kCLLocationAccuracyNearestTenMeters: CLLocationAccuracy
//let kCLLocationAccuracyHundredMeters: CLLocationAccuracy
//let kCLLocationAccuracyKilometer: CLLocationAccuracy
//let kCLLocationAccuracyThreeKilometers: CLLocationAccuracy
manager.desiredAccuracy = kCLLocationAccuracyBest
//ask the user for permission
manager.requestWhenInUseAuthorization()
//Start collecting location information
if #available(iOS 9.0, *) {
manager.requestLocation()
} else {
manager.startUpdatingLocation()
}
现在,为了访问位置更新,我们可以实现下面的函数,该函数称为超时,达到 distanceFilter。
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {}
locations 参数是一个 CLLocation 对象数组,表示设备的实际位置。通过这些对象,可以访问以下属性:coordinate,altitude, floor, horizontalAccuracy, verticalAccuracy, timestamp, description, course, speed
和测量两个位置之间距离的函数 distance(from:)
。
注意:在请求位置许可时,有两种不同类型的授权。
正在使用时授权仅授予应用程序在应用程序正在使用或前台时接收你的位置的权限。
始终授权,提供应用后台权限,如果你的应用关闭,可能会导致电池续航时间缩短。
应根据需要调整 Plist 文件。