iOS(定位一)后台定位和前台定位权限设置

一次定位及设置前台授权和后台定位


1.  首先导入头文件           #import  

2. 添加位置管理者属性    @property(nonatomic,strong)CLLocationManager*mgr;

3. 创建定位管理者 统一管理定位服务    _mgr= [[CLLocationManageralloc]init];

4. 请求授权  (三种方法: 第一种是前台授权  第二种是前后台同时授权但是用户反感

                          第三种是设置前台定位及设置代码和info.plist设置后台定位)

          4.1  仅限于在前台使用时授权

                  1) 配置info.plist相关key (NSLocationWhenInUseUsageDescription)

                  2)做好低版本适配

              if([_mgrrespondsToSelector:@selector(requestWhenInUseAuthorization)]){

                //当应用在使用时可以使用定位服务(仅限于应用在前台使用时授权,一旦程  序到后台就停止定位)

            [_mgrrequestWhenInUseAuthorization];

           }

       4.2 应用始终使用定位服务(应用在前台和后台都能获取到定位服务)——这种方式用户反感

           1)配置info.plist相关key(NSLocationAlwaysUsageDescription)

           2)做好低版本适配

           if([_mgrrespondsToSelector:@selector(requestWhenInUseAuthorization)]){

        1.2.2应用始终使用定位服务(应用在前台和后台都能获取到定位服务) //用户反感

    //反感是因为授权提示是 :@"应用未打开时,允许定位"

                 [_mgrrequestAlwaysAuthorization];

          }

       4.3 应用开启临时后台(设置后台运行模式) (常用模式)

                1) 配置info.plist相关key ( 这里需要新加一个选项 选择: Required background modes->打开items->选取App registers for location updates(定位后台运行的模式))  — 在ios8 之前只要设置这个就行了

              2) 在ios8以后就是ios9的一个新特性需要再加上一句代码 才能执行这个功能

 IOS9新特性要求代码允许mgr执行后台运行模式

_mgr.allowsBackgroundLocationUpdates=YES;//这是获取后台定位 前台授权还需要再设置 要是不要后台定位 这个就不要设置

注意 : 这个时候 用户反感的那个就要取消掉不用,但是前台的授权模式还是要打开


5. 设置代理   同时遵守协议   

1.3获取数据设置代理  <遵守协议 :CLLocationManagerDelegate>

_mgr.delegate=self;

6. 开启定位               [_mgrstartUpdatingLocation];

7. 实现CLLocationManagerDelegate 代理方法

当更新位置时调用    底层是异步操作定位

-(void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations{

CLLocation : 位置对象包含了位置信息这个里面有很多其他的属性可以设置  点击头文件查看即可

CLLocation*location = locations.lastObject;

NSLog(@"%f,%f",location.coordinate.latitude,location.coordinate.longitude);

停止定位

[_mgr stopUpdatingLocation];

}

 写到这里 基本的 定位(后台前台)都讲完了   还有其他的设置优化持续定位 如下: 

     优化持续定位  : (经纬度不变的情况下 就不用一直不断的去请求)

 1.  距离筛选器  减少不必要的回调

_mgr.distanceFilter = 10;

2  设置期望精确度  减少耗电量(减少能耗)

_mgr.desiredAccuracy=kCLLocationAccuracyBestForNavigation;//这个还有很多枚举值可以根据自己需要的进行选取

  谢谢! !  希望能帮到大家

你可能感兴趣的:(iOS(定位一)后台定位和前台定位权限设置)