2011-04-27 120 views
7

所有問候。位置更新,而應用程序在後臺或暫停

我正試圖在我的應用程序中實施重要的位置更改和區域支持。當應用程序處於活動狀態時,接收位置更新顯然沒有問題。我的問題是如何處理應用程序不活動時的更新。

這是我的,如果檢測到顯著位置改變或地區進入/退出會發生什麼的理解:

  • 如果應用程序在後臺運行或暫停,iOS的調用的LocationManager:didUpdateToLocation:fromLocation:(或locationManager:didEnterRegion :)在我現有的位置委託。
  • 如果應用程序被終止,iOS會在我的應用程序委託上調用application:didFinishLaunchingWithOptions:和UIApplicationLaunchOptionsLocationKey。在這一點上,我需要創建一個新的位置管理器實例來獲取新的位置。

這是正確的嗎?我錯過了什麼?

感謝您的幫助。

問候, --John

回答

7

你是部分正確。

如果應用程序在後臺,並且使用的是顯著位置的變化:

  1. 該應用程序將調用的LocationManager:locationDidUpdateToLocation:fromLocation
  2. 如果應用程序崩潰,而這是在後臺,它會調用應用程序:didFinishLaunchingWithOption:使用UIApplicationLaunchOptionLocationKey。然後您必須再次啓動位置管理器才能獲得重要的位置更改。然後這將進入locationManager:locationDidUpdateToLocation:fromLocation。這一步很重要

如果應用程序在後臺,並且使用的是區域監測

  1. 的LocationManager:locationDidUpdateToLocation:fromLocation不會叫
  2. 應用程序調用的LocationManager:didEnterRegion:
+0

正確。我遺漏了locationManager:didEnterRegion。我想我放棄了地區監測,似乎不行。試圖用各種閾值嘗試所有規模的地區,似乎無法使其工作。 – johnnyspo 2011-05-03 16:56:47

+0

@honcheng嗨,如果應用程序在後臺locationManager:didEnterRegion將被調用?真?我已經閱讀了大量的帖子,即使設置了區域監控,他們也聲稱一旦App在後臺,只有locationManager:locationDidUpdate:fromLocation將被調用。只是希望澄清一下,因爲我想在後臺設置區域監控。 – Unheilig 2013-07-14 14:43:33

+0

下面是關於如何獲取位置更新時的應用程序被終止/暫停iOS 7和8的解決方案:http://stackoverflow.com/questions/27742677/how-to-get-location-updates-for-ios -7-和-8-偶數時最APP-被懸 – Ricky 2015-01-02 13:07:10

-3

我相信它總是調用應用中:didFinishLaunchingWithOptions如果您的應用程序是不是在前臺。

+2

它只會在後臺調用,如果應用程序未啓動或崩潰。該設備嘗試重新啓動應用程序,所以它只調用這個方法,然後 – honcheng 2011-04-28 02:25:36

3

當應用程序處於後臺而不是應用程序被掛起時獲取位置更新是兩種截然不同的情況。你將不得不以不同的方式處理它們。

如果您的locationManager使用方法startMonitoringSignificantLocationChanges,則只能使用密鑰UIApplicationLaunchOptionsLocationKey,不能使用startUpdatingLocation

要獲得該應用程序在後臺位置更新時

A),請參閱:Background Location Services not working in iOS 7

B)該應用程序已被暫停/終止,請參閱:How to Get Location Updates for iOS 7 and 8 Even when the App is Suspended

我有寫了2篇非常長的文章,解釋了2情景之間的差異。上述2場景的源代碼也可以在GitHub上找到。

相關問題