2009-01-28 49 views
17

我正在尋找一些反饋,博客鏈接等提供一些技巧和竅門iPhone GPS的發展。我已經閱讀並理解API,我有我的演示應用程序啓動和運行等,但我已經遇到了iPhone上的GPS與「怪癖」。例如,當你的iPhone進入「省電模式」時,你似乎會收到更少的位置更新。我讀過你可以通過在你的應用程序中播放音樂來對抗這個問題[不確定這是否屬實]。iPhone GPS開發 - 提示+技巧

看起來,製作一個合理的計步器的條款,你應該過濾任何水平精度小於20米的閱讀。這聽起來正確嗎?

是否有任何一種清單在網上iphone gps gotchas?

在此先感謝。

回答

39

我不知道任何具體名單,但這裏有一些事情你應該記住:

  • 你沒有做GPS查找。你正在做核心位置查找。核心位置可能會或可能不會從GPS獲取其信息。許多人仍然使用沒有GPS功能的pre-3G iPhone,甚至在3G手機上,GPS在許多情況下可能不可用(例如,如果人在室內)。在這些情況下,手機將嘗試基於手機塔進行三角測量,核心位置將返回結果。它將比GPS更精確。
  • 核心位置將緩存數據。它提供給你的應用程序的第一次閱讀可能是一箇舊的閱讀,這可能也可能不準確,取決於手機是否移動。請確保檢查任何位置的時間戳,並在應用程序啓動之前查看它是否來自該位置。
  • 我不知道你的意思是「省電」模式,但是如果你正在考慮屏幕鎖定/關閉的時間,那麼如果你的應用程序仍在運行,這並不會阻止核心位置運行。相反,如果在使用核心位置的應用程序正在運行時鎖定手機,則手機電池的運行速度會比預期快得多,因爲手機會在新位置數據可用時繼續更新應用程序。您可以通過偵聽UIApplicationWillResignActiveNotification來檢測屏幕鎖定,並通過UIApplicationDidBecomeActiveNotification來檢測解鎖,從而避免出現這種情況。
  • 更高精度的結果將需要更多時間來獲取,因爲您等待的時間越長,結果越好,達到極限。如果你決定你需要在N米範圍內,考慮用戶可能需要等待多久,等待電話在其位置上。

20米是否足夠精確是根據您希望如何使用您的應用程序而回答的問題。測試應用程序並查看它是否按照您希望的方式工作。

+0

[quote]•我不知道你是什麼意思的「省電」模式,但如果你想到屏幕鎖定/關閉時,這並不會阻止核心位置運行,如果你的應用程序仍然在運行。[/ quote] 我不確定這是否屬實。我得到一個修復程序(17m HDOP) - 使用鎖定按鈕 - 等待30秒 - 再次打開(解鎖)後,需要一些時間才能再次修復 - 我得到的第一個是「不良」(約1000米)修復。 它看起來好像鎖定導致「電源安全模式」的位置(它不再使用GPS我會說) – ManniAT 2009-11-29 18:14:14

+2

當我寫這個答案時,iPhone OS 3.0甚至還沒有公開測試,所以現在可能不太準確比當時還要多。一般技術仍然適用,但屏幕鎖定時的行爲細節似乎發生了變化。 – 2010-02-24 04:04:58

26

湯姆有一個偉大的答案(我想特別注意到的第一個值返回通常可能是一個較舊的緩存位置),但我有一些事情要補充:

  • 你可以告訴的位置經理停止並重新開始,如果你想迫使它發出至少一個位置更新。
  • 如果您不知道,CLLocation中有便利的方法可以爲您提供兩個位置之間的距離。
  • 作爲文檔說明,您應該實現locationManager:didFailWithError:即使您不必(如果只是爲了停止一段時間的位置管理器更新)。
  • 徹底測試用戶不允許您的應用程序更新位置的場景!
  • 非常,很少有你可能會無序地更新(即你得到一個更準確的位置,然後是稍微不太準確的日期)
  • 模擬器會給你一個位置更新,但會一直報告你的位置作爲蘋果總部。