2013-04-24 86 views
0

我想獲取我的設備的位置24x7次。但根據蘋果文檔,應用程序最多隻能運行10分鐘。之後,應用程序會自動殺死。 我使用下面的代碼:位置服務在後臺執行

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
UIApplication * app = [UIApplication sharedApplication]; 
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    dispatch_async (dispatch_get_main_queue(),^{ 
     if (bgTask != UIBackgroundTaskInvalid) 
     { 
      [app endBackgroundTask: bgTask]; 
      bgTask = UIBackgroundTaskInvalid; 
     } 
    }); 
}]; 

// Start the long-running task and return immediately. 

dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ 
    lm.locationManager.distanceFilter = kCLDistanceFilterNone; 
    lm.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    [lm.locationManager startMonitoringSignificantLocationChanges]; 
    [lm.locationManager startUpdatingLocation]; 

    dispatch_async (dispatch_get_main_queue(),^{ 
     if (bgTask != UIBackgroundTaskInvalid) { 
      [app endBackgroundTask: bgTask]; 
      bgTask = UIBackgroundTaskInvalid; 
     } 
    }); 
}); 
} 

我也包括支持後臺模式需要的位置

但該應用程序只運行10分鐘。我如何讓應用程序始終運行。請幫助我!

+0

你在'didUpdateLocations:'中寫了些什麼? – samfisher 2013-04-24 07:29:13

+0

現在,我只是在日誌中獲取位置。自應用程序在後臺10-15分鐘後,日誌停止。 – 2013-04-24 07:33:08

+0

'significantLocationChanges'不要求你實現後臺任務。只需刪除bgtask創建並使用支持的背景模式鍵正常運行它 – samfisher 2013-04-24 07:35:50

回答

2

significantLocationChanges不需要您執行後臺任務。只需刪除bgtask創建並使用支持的背景模式鍵正常運行它。

計劃後臺任務在10分鐘後大概會被操作系統殺死,從而導致您的位置服務監控。所以你只需要刪除你爲位置更新創建的BGTask。