本文将给大家介绍如何使用CLLocationManager进行后台定位。
准备工作(重要):
在Info.plist文件中配置:
Required background modes-App registers for location updates
NSLocationAlwaysUsageDescription-Location is required to find out where you are(或其他内容)
准备工作完成后,在工程里CoreLocation framework,在VC里引入头文件#import<CoreLocation/CoreLocation.h>,添加CLLocationManagerDelegate,声明公共变量CLLocationManager*locationManager,在viewDidLoad里添加如下代码:
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
if([[[UIDevice currentDevice] systemVersion]floatValue] >=8) {
[locationManager requestAlwaysAuthorization];
}
if([[[UIDevice currentDevice] systemVersion]floatValue] >=9) {
locationManager.allowsBackgroundLocationUpdates=YES;
}
[locationManager startUpdatingLocation];
这里我们添加了iOS8跟iOS9系统版本判断,在iOS9的系统下,如果不使用新方法locationManager.allowsBackgroundLocationUpdates=YES;会导致定位切换到后台后,系统不会开启后台运行。
最后实现代理:
#pragma mark --CLLocationManagerDelegate
-(void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations {
//TODO:后台定位、结合MKMapView做地图轨迹......
}
顺便给大家说明下CLLocationManager的requestWhenInUseAuthorization与requestAlwaysAuthorization的区别。
[locationManager requestWhenInUseAuthorization]只在前台运行模式时起作用,如App切换至后台运行模式,代理方法didUpdateLocations不会继续执行。使用requestWhenInUseAuthorization需要在info.plist里配置:
NSLocationWhenInUseUsageDescription-Location is required to find out where you are(或其他内容)
[locationManager requestAlwaysAuthorization]则都可在前台、后台模式中运行,需要在info.plist里配置:
NSLocationAlwaysUsageDescription-Location is required to find out where you are(或其他内容)
不管使用NSLocationWhenInUseUsageDescription还是NSLocationAlwaysUsageDescription,都需要在info.plist里配置:
Required background modes-App registers for location updates
网友评论