在U轨迹项目中,我们需要使用后台定位
首先,来理解一下iOS中的地图到底是高德还是百度,iOS中的地图其实是不一定的,
因为在每个国家,地图这样的信息是属于机密信息,肯定一定绝对是不允许泄露的,不然那还得了,
你说,是不是?好了,不扯了,正式进入话题。
iOS中的地图是根据你所在的国家,自动导入的该国家的地图信息,比如在中国可能是百度,
在国外有些是高德,有些则可能是那个国家所使用的地图版本。
接下来,需要聊一聊,后台定位的方式:
方式一:标准定位
方式二:基站定位
方式三:GPS定位
这里我就要推荐一篇博文了,我个人觉得写的真的很好。
http://blog.sina.com.cn/s/blog_7581a4c301015b27.html
当然他那篇文章中,转载的第一篇英文文章也写的很好,可以好好看看。
接下来,就是要上代码了,总不能聊理论吧
接着上一篇文章,这篇主要是讲如何实现后台定位。
需要在info.plist文件中设置两个字段。
后台需要运行的模式为定位
允许后台运行此App,不过不会运行很久,苹果给每个应用程序在后台运行的时间是有限制的,若是想一直运行,需要自己设置。之后会讲到。
怎么让应用程序按Home键后还能一直运行呢?
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
BOOL isBackground = NO;
[self saveCurrentLoaction:locations];
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
isBackground = YES;
}
if (isBackground) {
[self saveCurrentLoaction:locations];
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
}
}
#pragma mark 获取当前用户位置
-(void)saveCurrentLoaction:(NSArray *)locations{
CLLocation *currentLocation = [locations lastObject];
CLGeocoder *gecoder = [CLGeocoder new];
[gecoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
NSString *userLocationInfo = [[placemarks lastObject] name];
}
}
以上,便实现了无限的后台定位功能。需要注意的一点是,如果是企业项目,可以把Required Background Modes设置为viop,即可,审核不用走AppStore流程。
如果是自己没事写的demo,想在AppStore上上线的话,一定一定一定要注意,需要给该App设置一个可以在进入后台能关闭后台运行的按钮,
比如说,你手机上的音乐,是不是在进入后台都能找到一个地方关闭音乐的播放,如果如果如果你没有这样设定的话,AppStore审核是不会让你的App上线的,
因为这样会很耗电,苹果是不允许你这样做的,所以呢,你一定要注意这一点。