我正在尝试在后台发布数据,我希望在常规时间间隔内收到响应,以便我尝试使用CLLocation Manager。但didUpdateToLocation方法只调用一次。 请建议我! 在这里输入代码
- (void)applicationDidEnterBackgroundUIApplication *)application
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyBest; // 100 m
[locationManager startUpdatingLocation];
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_ QUEUE_PRIORITY_DEFAULT, 0), ^{
//Do the work associated with the task
// code for Posting Data Here
NSLog(@"backgroundTimeRemaining: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
- (void)locationManagerCLLocationManager *)manager
didUpdateToLocationCLLocation *)newLocation fromLocationCLLocation *)oldLocation {
NSLog(@“位置变更”); } 此方法只调用一次。
答案 0 :(得分:0)
当然,你应该对代表收到的消息至少一次感到高兴。没有代码会延迟后台执行代码中的应用程序暂停。此类代码也可以工作大约10分钟,并且会被系统杀死。
如果您需要在后台跟踪用户位置,可能只需将此模式设置为 Info.plist ( UIBackgroundModes )中的应用后台操作并添加选项位置)并且您的应用不会被暂停(仅在内存使用量很大的情况下)