2011-08-18 70 views
0

我想在后台发布数据,我希望从定期的时间间隔接收响应,以便我尝试使用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

当然,你应该很高兴代表收到的信息至少有一次。没有任何代码会延迟应用程序在后台执行代码中的挂起。此类代码也可以工作大约10分钟,并且会被系统杀死。

如果您需要跟踪在后台用户的位置,比也许你只是将​​此模式应用背景操作的Info.plistUIBackgroundModes,并添加选项位置)和你的应用程序将不会被暂停(仅在内存使用量很高的情况下)