2016-02-19 48 views
0

我正在開發一個隨需應變的位置提供解決方案,但是我發現該文檔對我來說太困難,無法找到最有效的解決方案。Android位置澄清

這裏是我的理解至今:

LocationManager.getLastKnownLocation()基本上是一個捎帶方法。如果沒有其他應用程序啓用位置,您的應用程序將不會返回位置。

LocationManager.requestLocationUpdates(),據我所知,這基本上設置了位置更新的偵聽器。實際調用的方法是監聽器的「OnLocationChanged()」。所以在技術上你可以把你的位置顯示代碼放在「onLocationChanged」中...

如果是這樣的話......我如何才能真正獲得更新的位置?我不希望在EVERYTIME位置發生變化時進行更新。我希望按需定位,而不是每當它更新時。我將如何實現?

===

我目前的猜測是,......一旦你安裝了監聽器,只要您撥打「getLastKnownLocation」,這將是一個更新的一個通過你的監聽器創建的。真的嗎?它是如何工作的?

+0

可能重複的[getLastKnownLocation vs requestLocationUpdates](http://stackoverflow.com/questions/22575433/getlastknownlocation-vs-requestlocationupdates) –

+0

請看看這個答案:http://stackoverflow.com/a/33599343/4032259 – Mayur

回答

1

如果您關閉手機上的位置,然後打開它,最後一次知道的位置將返回null。

現在實際的方法開始得到新的位置是方法

requestLocationUpdates() 

這將更新

getLastKnownLocation() 

同時requestLocationUpdates()被調用時,

onLocationChanged(Location location) 
將調用

來調用您需要對位置對象執行的操作。

因此,在此方法中,您可以管理新的位置/位置更改。

0

如果您只想要一個位置,並且只有當您打電話時,請使用requestSingleUpdate()。查看關於它的文檔here。請記住,如果您使用GPS和建築物內部,則可能需要一些時間才能返回位置更新。

0

如果您有能力使用上述評論中顯示的MaxApClient(How do I get the current GPS location programmatically in Android?),那可能是最佳選擇。

如果您不想依賴Google API可用,我會建議使用這兩個選項來改善用戶體驗。最初的呼叫可能會或可能不會爲空,但也可能會或可能不會。最初,我會打電話getLastKnownLocation,如果它返回的東西在你的應用程序中使用它,更新/初始化接口。

同時,請求位置更新與requestSingleUpdate如果你只想1,或requestLocationUpdates如果你想經常性的更新,而當onLocationChanged在你的聽衆被激發,更新您正在使用的位置在應用程序以及任何受其影響的界面中。