代码改变世界

ios7.0 ios8.0 ios9.0地图定位的变化

2016-03-07 14:47  lvjun70  阅读(104)  评论(0)    收藏  举报

:colocation:区域监听,用于地理定位,地理编码(着重功能实现)

 *  MapKit:基于colocation,地图展示,例如大头针,路线,覆盖展示等(着重界面)

 *  LBS:Location Based Service(基于位置的服务)

 *  SoloMo:social Local Mobile(索罗门)社区,位置,移动

 *  1.导入主头文件

 *  2.CLcolacationManager

 *  当访问用户隐私的时候会自动弹出提示框跪

 *

 * ios8.0后:

 * 苹果进一步加强了对用户隐私的保护:当app想访问用户的隐私信息,系统不在自动弹出一个对话框让用户授权

 * 解决方法:

 * 1)掉用ios8.0的API 主动请求用户授权:- (void)requestAlwaysAuthorization // 请求前台后台都能获得用户的授权

 * 2)- (void)

 

1.导入<CoreLocation/CoreLocation.h>

2.创建管理者

代码实现:

#import <CoreLocation/CoreLocation.h>

 @interface ViewController ()<CLLocationManagerDelegate>

@property (nonatomic, strong)CLLocationManager *lm;

#pragma mark 懒加载

// dang 点击的时候就会进行地图定位

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    // 2.使用位置管理者

    [self.lm startUpdatingLocation];

}

- (CLLocationManager *)lm

{

    if (!_lm) {

        // 1.创建位置管理者

        _lm = [[CLLocationManager alloc] init];

        // 1.1 用代理,通知,block等来实现获得位置的方法

        _lm.delegate = self;

        // 每隔多远定位一次

       // _lm.distanceFilter = 100;

        //cmd + c, cmd + f,cmd + v

        /**

         *kCLLocationAccuracyBestForNavigation // 最适合导航

          kCLLocationAccuracyBest; // 最好的

          kCLLocationAccuracyNearestTenMeters; // 附近10米

          kCLLocationAccuracyHundredMeters; // 100m

          kCLLocationAccuracyKilometer; // 1000m

          kCLLocationAccuracyThreeKilometers; // 3000m

         */

        // 精确度越高,越好点,定位时间越长(需要根据项目需求选者)

        // 后台定位需要配置:

        

        _lm.desiredAccuracy = kCLLocationAccuracyBest;

        

NSLocationWhenInUseUsageDescription 

NSLocationAlwaysUsageDescription 

           /*****ios8.0+的适配,需要在info.pist导入NSLocationWhenInUse*/

        if ([[UIDevice currentDevice].systemVersion floatValue] >=8.0) {

            // +authorizationStatus != kCLAuthorizationStatusNotDetermined

            // 这个方法不会有效

            // 当前的授权状态为前台授权时,此方法也会有效

              [_lm requestAlwaysAuthorization];

//

        }

    //ios9中需要允许后回去用户位置才能在后台进行定位

        if ([[UIDevice currentDevice].systemVersion floatValue]>=9.0) {

            // 允许后台获取用户位置(ios9.0)

            _lm.allowsBackgroundLocationUpdates = YES;

        }

       

//        if (_lm respondsToSelector:@selector(requestAlwaysAuthorization)) {

//            [_lm requestAlwaysAuthorization];

//        }

        // 前台授权

        // 默认情况下不可以在前台获取位置,勾选后台模式,

        //[_lm requestWhenInUseAuthorization];

        

        // 前后太定位说明(在前后台都能够获取用户的信息)

        //[_lm requestAlwaysAuthorization];

    }

    return _lm;

}