iOS 定位服务

定位服务基本流程
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。