我正在使用coreLocation services / Framework来获取前台和后台状态的位置更新。我的应用程序在这两种情况下都能正常工但是当用户在登录状态下强行退出/终止应用程序时它不会起作用。当用户应用程序重新启动时,第一个问题Xcode将不会在调试器会话中打印记录器。第二件事可能是didUpdateLocations方法无法工作。
我为我的项目做了以下设置。 - 我已在功能部分下方检查了位置更新。 - 我总是在使用说明中添加时,在使用说明中,位置使用说明,info.plist文件中所需的背景模式。
[注意:我正在使用目标c语言进行项目& Xcode 9.2与iOS 11.2.2最新版本。我的代码在iOS 10上运行良好,但是当我升级到11.2.2这是最新版本时,它无法正常工作。]有人可以帮我解决这个问题吗?我错过了什么吗?
代码:我在这里实施了我的位置跟踪方法。从两个委托方法中调用它 - applicationDidBecomeActive& applicationDidEnterBackground。
- (void)startLocationTracking
{
NSString *responeParam = @"";
if ([CLLocationManager locationServicesEnabled] == NO)
{
responeParam = @"Disabled location";
}
else
{
CLAuthorizationStatus authorizationStatus= [CLLocationManager authorizationStatus];
if(authorizationStatus == kCLAuthorizationStatusDenied || authorizationStatus == kCLAuthorizationStatusRestricted)
{
responeParam = @"Unauthorize location";
}
else
{
responeParam = @"Authorize location";
CLLocationManager *locationManager = [LocationTracker sharedLocationManager];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
if (SystemVersion > 9.2)
{
[locationManager setAllowsBackgroundLocationUpdates:YES];
locationManager.pausesLocationUpdatesAutomatically = false;
}
NSLog(@"location updating ");
[locationManager startUpdatingLocation];
}
}
}
在applicationDidEnterBackground中我也维护了bgTaskId
-(UIBackgroundTaskIdentifier)beginNewBackgroundTask
{
UIApplication* application = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTaskId = UIBackgroundTaskInvalid;
if([application respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]){
bgTaskId = [application beginBackgroundTaskWithExpirationHandler:^{
}];
if ( self.masterTaskId == UIBackgroundTaskInvalid )
{
self.masterTaskId = bgTaskId;
}
else
{
[self.bgTaskIdList addObject:@(bgTaskId)];
[self endBackgroundTasks];
}
}
return bgTaskId;
}