我有一个使用后台位置更新的应用,它需要不断跟踪设备位置,无论应用是在前台还是后台。我在app delegate中设置了后台跟踪功能。
在前端我有一个带有工作mapkit视图的UIViewController所有CCLocationManager代码触发器没有错误但是在自定义UIViewController类中永远不会触发didUpdateUserLocation。
背景位置跟踪绝对没有问题。
以下是我在viewDidLoad中使用的代码
[self.mapView setShowsUserLocation:YES];
[self.mapView setShowsPointsOfInterest:YES];
self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager requestWhenInUseAuthorization];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
[self.locationManager setDelegate:self];
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[self.locationManager requestWhenInUseAuthorization];
}
NSString *error;
if (![CLLocationManager locationServicesEnabled]) {error = @"Error message";}
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (status == kCLAuthorizationStatusRestricted || status == kCLAuthorizationStatusDenied) {error = @"Error message";}
if (error) {NSLog(error);}
else
{
status = [CLLocationManager authorizationStatus];
self.locationManager.pausesLocationUpdatesAutomatically = NO;
self.locationManager.activityType = CLActivityTypeAutomotiveNavigation;
[self.locationManager stopMonitoringSignificantLocationChanges];
[self.locationManager startUpdatingLocation];
}
任何帮助将不胜感激 感谢
答案 0 :(得分:0)
您需要查看以下详细信息:
在模拟器上进行测试?必须在真实设备上测试didUpdateLocations。
确保您指定了NSLocationAlwaysUsageDescription字符串,否则应用程序将不会显示授权消息,您将无权获得授权。
您是否实现了locationManager:didFailWithError:?你有没有错误?
您是否实现了locationManager:didChangeAuthorizationStatus:?您是否通过成功的授权状态进行了此调用?
答案 1 :(得分:0)
我终于解决了这个问题。
即使您正在使用Schema和Xcode中的位置内容,您仍然需要通过Debug>在模拟器中设置它。位置
希望这有助于其他人。
答案 2 :(得分:0)
现在,对于iOS 9,任何更新都需要包含以下内容;
if ([ locationManager respondsToSelector:@selector(requestWhenInUseAuthorization )])
{
locationManager.allowsBackgroundLocationUpdates = YES;
}
其他背景更新将受到损害。