2013-05-31 26 views
4

我有一個應用程序,調用[locationManager startUpdatingLocation]並從不呼叫[locationManager stopUpdatingLocation]由於GPS是在背景中運行。iOS:背景GPS自行停止?

我已將我的info.plist文件設置爲允許應用程序註冊後臺位置更新。但是我偶爾會注意到(當應用程序處於後臺時),屏幕右上方的小箭頭表示GPS已打開,自行關閉。

這有什麼理由應該發生?

我只呼叫[locationManager startUpdatingLocation]一次,在applicationDidBecomeActive方法。我是否也應該在applicationDidEnterBackground方法中調用它?

+0

您的應用程序是否繼續按預期運行?它只是箭頭消失嗎? –

+0

我也在想。也許應用程序在後臺崩潰。但是在應用程序崩潰之後,下次啓動會啓動一個新實例,對吧?在我的情況下,在GPS燈熄滅後,我啓動了應用程序,它將我帶到了之前啓動時所用的同一屏幕,並暗示應用程序崩潰不負責任。 – PaulG

+0

當這種情況發生時,你正在移動嗎? – Segev

回答

6

從蘋果文檔:

允許位置管理器暫停更新可以提高電池在目標設備上 生活在不犧牲位置數據。當此 屬性設置爲YES時,位置數據 不太可能更改時,位置管理器會暫停更新(並且 會關閉相應的硬件)。例如,如果用戶停止使用導航應用程序的 ,但位置管理器可能會暫停更新以保持 一段時間。您可以通過爲activityType屬性指定值來幫助確定何時暫停 位置更新。

iOS 6在Core Location方面發生了變化。您需要禁用自動暫停。將pausesLocationUpdatesAutomatically更改爲NO。即使該應用程序進入後臺位置更新將被髮送,喜歡它用在<工作的iOS 6

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

1

更新:您可以在後臺使用標準的更新。根據Apple的說法:

如果您的應用程序需要位置更新,無論該應用程序是處於前景還是後臺,這樣做都有多種選擇。首選方法是使用重要位置更改服務在適當的時間喚醒您的應用以處理新事件。但是,如果您的應用需要使用標準位置服務,則可以將您的應用聲明爲需要後臺位置服務。

只有當缺乏這些服務會損害其運營能力時,應用程序纔會請求後臺定位服務。另外,任何請求後臺定位服務的應用程序都應該使用這些服務爲用戶提供切實的好處。例如,由轉向導航應用程序可能成爲後臺定位服務的候選對象,因爲它需要跟蹤用戶的位置並在下一次輪到時進行報告。

這個鏈接看看:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4


應用程序在後臺運行,通常意味着使用[locationManager startMonitoringSignificantLocationChanges];而不是標準的[locationManager startUpdatingLocation];的。

蘋果在這個問題上有一些嚴格的指導方針。如果你還沒有,你應該認真閱讀起來就可以了這裏:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1

機會是你的位置更新停止,因爲你使用的是標準的位置更新在後臺而不是顯著位置的變化。

+0

感謝您的回答。如果即使在後臺也需要高度的準確度會怎樣?此外,爲什麼更新會停止,因爲我正在使用標準位置更新? – PaulG

+0

更新了我的答案。 – sangony