2012-10-09 33 views
3

在iOS中,據稱可以使用CLLocationManagerstartMonitoringForRegion:方法來註冊代理,以響應移動到特定地理區域的設備,即使應用程序未啓動也是如此。從CLLocationManager Class Reference關於CLLocationManager的iOS應用程序生命週期startMonitoringForRegion

在iOS中,您在位置管理器中註冊的區域會在啓動應用程序之間持續存在。如果在您的iOS應用程序未運行時發生區域交叉,系統會在後臺自動將其喚醒(或重新啓動),以便它可以處理該事件。重新啓動時,先前配置的所有區域都可在您創建的任何位置管理器對象的monitoredRegions屬性中使用。

我假設如果應用程序重新啓動,iOS實際上並沒有把它帶到前臺。我找不到任何好的樣本說明成一個整體的應用,其中startMonitoringForRegion適合,所以我的問題是:

  1. 是否有一個從某處特定註冊startMonitoringForRegion委託?我猜測它不能在視圖控制器中顯示,如果我們啓動應用程序而不把它帶入前臺。有人可以舉一個例子來說明一下嗎?
  2. 如果我們決定我們想要進入該地區的應用程序的前景,我們會怎麼做?
  3. 何時startMonitoringForRegion在操作系統中註冊,何時未註冊?用戶是否必須至少一次啓動應用程序(即使它已經被殺死)才能進行初始註冊?如果用戶關閉設備,該怎麼辦?我們的處理程序是否會在設備下次啓動時進行註冊,或者用戶是否必須至少再次啓動應用程序?
+0

什麼類引用意味着應用程序將被重新啓動,並且在applicationDidFinishLaunching:選項中,選項將包含鍵'UIApplicationLaunchOptionsLocationKey',以指示由於檢測到didEnterRegion/didExitRegion監視區域而重新啓動應用程序。如果檢測到密鑰,您需要重新啓動位置管理器和代表,然後才能在代表內進行任何處理。 – nhisyam

回答

1

是否必須從特定位置註冊startMonitoringForRegion的委託?我猜測它不能在視圖控制器中顯示,如果我們啓動應用程序而不把它帶入前臺。

假。視圖控制器對象仍然確實存在如果它被分配初始化,即使它的內容沒有被呈現。

如果我們決定由於進入該地區而決定將應用程序置於前臺,我們將如何做?

使用公共API(我不知道在後臺的應用程序是否可以使用- [UIApplication openURL:]有自己的URL方案本身帶入背景,但我懷疑它)不可能的;但是你可以使用SpringBoardServices框架來啓動你的應用程序:

SBSLaunchApplicationWithIdentifier(CFSTR("com.mycompany.theBestiPhoneAppEver"), false); 

當startMonitoringForRegion與OS註冊時是未註冊?用戶是否必須至少一次啓動應用程序(即使它已經被殺死)才能進行初始註冊?

如果用戶永遠不會運行你的應用程序,代碼裏面將永遠不會運行,所以它不會被註冊。

如果用戶關閉設備,該怎麼辦?我們的處理程序是否會在設備下次啓動時進行註冊,或者用戶是否必須至少再次啓動應用程序?

現在這是一個很好的問題。我不知道它在我頭頂,也沒有在文檔中找到答案(可能你還沒有找到答案),所以我會說你最好親自嘗試一下。