2011-08-18 68 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(@"Location Change"); 
    } 
    This Method Call Only Once. 
+0

有你在身邊有些感動?我從經驗中知道,即使使用kCLDistanceFilterNone,您可能需要移動得相當遠(有時超過30米)才能實際發送更新。 –

+0

根據你的位置更新locationManager.distanceFilter值應該是什麼。 – Vijay

+0

這是一個很好的價值。但是,根據您的位置,手機可能無法很好地修復您的位置。因此,即使每當它移動一米時它都會通知您,但它可能不知道它已經移動了一米。 –

回答

0

代碼確保你是不是在模擬器測試此。 你沒有在iPhone模擬器上獲得位置更新。

+0

我在設備上測試這個,但方法只調用一次 – Vijay

0

爲了在後臺運行位置服務,您需要修改plist,使UIBackgroundModes鍵包含位置。

+0

我allready修改我的應用程序plist作爲所需的背景模式:應用程序註冊的位置更新 – Vijay

+0

我不知道如果你需要這個或沒有,但你的plist還包含兩個*所需的設備功能下的位置服務*和* GPS *? –

+0

感謝David V對你的回覆 – Vijay

0

通話應該是

[locationManager startMonitoringSignificantLocationChanges]; 
+0

我也稱這種方法,但我的問題沒有解決 – Vijay