2011-02-08 67 views
3

我對Android中的服務有疑問。我想知道從GPS獲取位置變量的最佳方法是什麼。我正在使用實現GPS模塊的服務執行地理定位應用程序。爲了獲得位置,我在類的靜態和公共方法中創建了一個變量,以便從類外部調用,就是這樣。爲了取回我只是在我的類中使用GPS的位置:Android中的GPS服務

位置mLocation = ServiceGPS.getLocation(); 類ServiceGPS有這個方法:

公共靜態位置的getLocation(){ 回報mLocation; }

在這種情況下,我不真正看到綁定到服務的要點,因爲我只需要調用靜態方法。我也在考慮做一個基類或實現LocationListener,但這種方式非常簡單,它可以工作並節省代碼寫入。

非常感謝您的幫助,並與我分享您的知識。

BR。大衛。

+0

請記住投票選出答案,並選擇您認爲最好的答案 - 通過這樣做可以獲得積分,而且人們更有可能在將來回答您的問題。 – 2011-02-10 18:33:21

+0

嗨Ollie我在下面回答。 – Dayerman 2011-02-11 13:05:39

回答

9

在Android中你不能「搞定」的位置,因爲它可能來自不同的地方(最後已知位置,GPS接收器,Wi-Fi網絡位置或移動數據網絡),更重要的是它可能需要一段時間才能收到位置,或者您可能不會收到一個位置(例如GPS存在,但室內沒有信號)。

,它可能需要一段時間才能拿到的位置,這意味着你必須運行一個單獨的線程的位置尋找,除非有在先緩存的位置。否則,您的應用程序將鎖定,直到獲取該位置(這可能永遠不會發生,例如,在沒有GPS或地理定位網絡的設備上)。

這是你需要閱讀,消化,然後用鑰匙頁: http://developer.android.com/guide/topics/location/obtaining-user-location.html 如果你是新來的地理位置在Android中,使用示例代碼開始。

我已經學會了添加地理位置到應用程序的東西...

  • 不要假定有位置提供。該設備可能沒有網絡連接,或沒有GPS。您需要在代碼中處理這些情況的錯誤。
  • 始終使用線程做地理查找,以保持應用程序響應
  • 如果可能,嘗試使用Android最近一次已知的位置,它提供了一個快速鎖定。您可以將背景中的位置更新爲更準確的位置。
  • 如果應用程序可以在不能做到地理位置(如更便宜的平板電腦,谷歌電視等)存儲在喜好的位置的設備上運行,因此用戶特定的一次,它使用的是每次應用程序加載(如果它無法找到新的定位)
  • 它通常是有意義的創建一個類的專門用來管理越來越位置,穿線等。然後你的應用程序中的其它類可以簡單地調用靜態方法,就像你建議,但面臨的挑戰是代碼你用它來獲得你的變量的位置值!
  • 您可能無法獲取位置 - 不要假設您會,設備&上下文不盡相同。
  • 除非您必須擁有非常準確的位置,否則請始終使用網絡位置提供商,因爲它們通常非常快。從新鮮的GPS位置查找可能會非常緩慢,用戶會感到無聊和沮喪。谷歌地圖看起來相當快,但它實際上做了很多位置緩存,而且有時你會發現獲取新位置的速度很慢。

我建議在Android馬克·墨菲的電子書,他擁有出色的地理位置覆蓋面和源代碼示例http://commonsware.com/

+0

+1,口語很好。添加GPS不僅僅是一個「即插即用」功能,它需要一些規劃,因爲它幾乎可以保證一段時間內不會出現問題。 – Brandon 2011-02-08 20:13:24

0

我不是剛剛起步的位置...... 還有我cheking提供商調用另一個方法的服務。並根據這個我會不會拋出一個異常。導致我做事後不是問題。我很感激你的信息。但我的問題是:

我真的不明白在這種情況下綁定到服務的點,因爲我只需要調用靜態方法。我也在考慮做一個基類或實現LocationListener,但這種方式非常簡單,它可以工作並節省代碼寫入。

實際上,我在一個服務中運行我的位置,因此在另一個線程中,所以我沒有明白你的觀點。 看來問題在於,Android中的位置如何工作? Cheers David