二、后台定位

注意:请求用户权限,分为:

  • ①、只在前台开启定位;
  • ②、在后台也可定位。
    建议只请求一个,如果两个都需要,只会请求②;

早先,iOS 8在使用CoreLocation定位的时候做了如下修改

  • (1)、定位授权的方法,CLLocationManager增加了如下两个方法:

    • ①、始终允许访问位置信息

      - (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);
      
    • ②、使用应用程序期间允许方位位置数据

      - (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);
      
  • (2)、在Info.plist文件中添加如下配置:

    • ①、NSLocationAlwaysUsageDescription
    • ②、NSLocationWhenInUseUsageDescription

    这两个键的值就是授权alert的描述,实例配置如下:
    二、后台定位_第1张图片

// 1. 实例化定位管理器
_locationManager = [[CLLocationManager alloc] init];
// 2. 设置代理
_locationManager.delegate = self;
// 3. 定位精度
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
// 4.请求用户权限:分为:?只在前台开启定位?在后台也可定位,
//注意:建议只请求?和?中的一个,如果两个权限都需要,只请求?即可,
//??这样的顺序,将导致bug:第一次启动程序后,系统将只请求?的权限,?的权限系统不会请求,只会在下一次启动应用时请求?
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8) {
    //[_locationManager requestWhenInUseAuthorization];//?只在前台开启定位
    [_locationManager requestAlwaysAuthorization];//?在后台也可定位
}
// 5.iOS9新特性:将允许出现这种场景:同一app中多个location manager:一些只能在前台定位,另一些可在后台定位(并可随时禁止其后台定位)。
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
    _locationManager.allowsBackgroundLocationUpdates = YES;
}
// 6. 更新用户位置
[_locationManager startUpdatingLocation];

你可能感兴趣的:(ios,定位)