15

此前獲取用戶當前的位置我已經使用的LocationManager:通過LocationManager使用FusedLocationProviderApi是否有任何優勢?

LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

} else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
} 

這是很容易閱讀和非常簡單的代碼。

但我已經注意到,谷歌最近發佈New Client API Model in Google Play Services,並建議使用FusedLocationProviderApi它看起來像要複雜得多,它是異步,它需要處理回調等

是否有使用過FusedLocationProviderApi中的LocationManager任何優勢?

+0

它提供更好的準確性,更少的電池消耗,因爲它在gps和基於WiFi的位置之間切換。爲了避免複雜性,我推薦使用這個庫:https://github.com/mcharmas/Android-ReactiveLocation – cYrixmorten

回答

15

FusedLocationProvider使用混合硬件來確定基於請求上下文的位置,這意味着它對您透明地進行了優化。它還會緩存應用程序之間的捕獲位置,以避免不必要的工作來確定位置信息。因此,如果用戶有各種位置感知應用程序,他們可能會避免徵稅設備(並等待)進行位置捕獲,因爲可能已經緩存了該位置。

雖然ol的LocationManager可以滿足小型的一次性場合,但您絕對應該考慮使用較新的替代方案,因爲它的好處可能很大,而且實施起來也很簡單。

您可以使用它,因爲Google Play服務定期更新各種設備,並不斷改進基於位置的功能(以及更多)。

在發佈的鏈接FusedLocationProvider的解釋:https://www.youtube.com/watch?v=Bte_GHuxUGc

2

在某些情況下FusedLocationProvider可怕執行。例如,如果您想跟蹤地圖上的路徑,則可能會決定在GPS數據和Wifi數據之間切換。要計算行駛的精確距離,使用LocationManager強制GPS讀數要好得多,特別是如果您還想跟蹤哪些wifi沒有提供的高度。

+0

在我的一個項目中,我需要每隔10秒捕獲一次用戶的位置。 我使用了GPS和網絡提供商。我的路徑是靠近河流的道路。 當我在谷歌地圖中繪製捕獲的經緯圖時,它顯示5-6mts的不同緯度比實際緯度長並且落在河中。 根據該測試標準,最終結論是用戶的路徑在河流上相對錯誤。 所以我可以使用融合在我的情況。現在所有工作正常使用融合,但根據您的意見,我懷疑所以請建議我。 在我的情況下,我需要適當的經濟長期。 –

+0

在我的測試中,通過我已閱讀的內容,我認爲如果要準確跟蹤路徑,最好用位置管理器強制GPS。如果電池壽命不是最關心的問題。我注意到像S-Health或MapMyRun等其他高質量應用程序似乎使用位置管理器,因爲當我與我同時運行這些應用程序時,它們的軌道看起來與我的軌道非常相似 –

+0

我也使用過,但我的路徑是不準確的。我花了很多時間測試,我也嘗試過不同的設備。 –

0

請記住,FusedLocationProvider使用LocationManager下蓋至少獲得GPS點。它可能會執行Wifi掃描並查找結果以確定位置,而不是使用網絡提供程序,但沒有任何有關此知識的文檔。

除非你不能或不想使用FusedLocationProvider,我會建議使用它。

相關問題