2012-11-22 122 views
14

我有一個應用程序,使用startMonitoringForRegion:startMonitoringSignificantLocationChanges的組合來了解應用程序在後臺時用戶的位置。這是否意味着我需要在Info.plist中包含UIBackgroundModes密鑰的location值?UIBackgroundModes位置和重要的位置更改與區域監測

這是從文檔報價:

的顯著變化位置服務,強烈建議那些不需要高精度的位置數據的應用程序。有了這項服務,只有當用戶的位置發生重大變化時纔會生成位置更新;因此,它非常適合向用戶提供非關鍵的位置相關信息的社交應用或應用。如果應用程序在發生更新時暫停,系統會在後臺將其喚醒以處理更新。如果應用程序啓動此服務,然後終止,系統會在新位置可用時自動重新啓動應用程序。此服務在iOS 4及更高版本中可用,並且僅在包含蜂窩無線電的設備上可用。

...

,提供連續的位置更新給用戶(甚至在後臺運行),可以通過在其Info.plist文件中UIBackgroundModes鍵(與位置值)啓用後臺位置服務的應用程序。將此值包含在UIBackgroundModes鍵中並不妨礙系統暫停應用程序,但它確實告訴系統應在每當有新的位置數據要傳遞時喚醒應用程序。因此,該密鑰有效地讓應用程序在後臺運行,以在發生位置更新時處理它。

我對此的解釋是,如果應用程序需要不斷位置更新,就像衛星導航應用爲UIBackgroundModeslocation值時,才需要。

我也嘗試在設備上運行該應用程序而沒有UIBackgroundModes鍵的location值,它會繼續報告重要的位置更改以及何時輸入了退出的區域。

另外,在CLLocationManager Class Reference中提到的UIBackgroundModes的唯一位置在startUpdatingLocation討論中,我沒有使用它。

回答

14

你對location鍵是正確的,只有當你的應用程序需要高精度的位置更新時,即使在後臺也是如此。像Runkeeper這樣的東西使用它可以讓它跟蹤你的位置,即使你正在使用另一個應用程序進行多任務處理。 From the docs for iOS Keys: UIBackgroundModes

「位置」:該應用程序提供基於位置的信息給用戶,並要求 使用的標準定位服務(而不是在 顯著改變位置的服務)來實現此功能。

而且

凡存在在後臺運行的替代品,這些替代品,而應使用。例如,應用程序可以使用顯着位置更改界面來接收位置事件,而不是註冊爲背景位置應用程序。

區域監測將在沒有location密鑰的情況下工作。實際上,區域監控將在沒有啓用任何特殊iOS密鑰的情況下運行。

你說你沒有使用CLLocationManager,但是如果你使用的是區域監控,你將不得不使用那個類。您需要爲您的應用設置位置管理器委託才能真正獲取區域通知。

+0

我的意思是我沒有使用'startUpdatingLocation'。非常感謝你的回答! –

+0

啊,我明白了,對不起。 –

+0

@AdamSwinden我在我的應用程序和位置更新的背景模式中使用區域監視,所以如果我必須使用後臺模式,我需要告訴reviewcenter。 –

-1

是的,你必須需要,如果你使用的是顯著改變位置服務(startMonitoringSignificantLocationChanges)來監視用戶位置的背景和在應用程序殺的狀態添加在Info.plist中下底色模式「位置」鍵。