定位服务基本流程
1.服务开关:判断系统是否开启定位服务
BOOL isLocation = [CLLocationManager locationServicesEnabled];
2.权限申请:开启定位服务有4中方式 永不、使用时、总是、下次询问
获取状态是下次询问开启,则去申请开启权限
self.manager = [[CLLocationManager alloc] init];
if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
[self.manager requestWhenInUseAuthorization];
}
3.权限更新:当定位服务状态改变则调用下面代理方法 这个需要遵循代理协议CLLocationManagerDelegate
并实现代理方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
//位置信息获取
[self.manager startUpdatingLocation];
}else if (status == kCLAuthorizationStatusDenied){
//定位服务关闭
}
}
4.开始位置信息获取
[self.manager startUpdatingLocation];
5.位置信息返回 系统调用代理方法
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations {
//地理信息
CLLocation *location = [locations firstObject];
CLGeocoder *coder = [[CLGeocoder alloc] init];
[coder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
//地标信息
}];
[self.manager stopUpdatingLocation];
}
-
CLLocation
某个位置的地理信息(经度/ 纬度 / 海拔 ...) -
CLPlacemark
地标信息(省市街道...) -
CLGeocoder
提供CLLocation和CLGeocoder之间的转换
通过CLGeocoder实例调用reverseGeocodeLocation:completionHandler:获取回调得到CLPlacemark -
最后要关闭位置信息服务
其他定位相关服务
- 位置变化 / 运动轨迹 / 速度
- 后台定位服务
- MapKit
网友评论