美文网首页
iOS 定位服务

iOS 定位服务

作者: JopYin | 来源:发表于2019-08-09 15:18 被阅读0次

    定位服务基本流程
    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

    相关文章

      网友评论

          本文标题:iOS 定位服务

          本文链接:https://www.haomeiwen.com/subject/lhlhjctx.html