天天看點

Android之地理資訊服務·Android的定位服務地理資訊服務

地理資訊服務

1 Android的定位服務

通過擷取移動裝置上的GPS資訊,基站資訊,Wifi資訊等與目前位置修改的資訊,用來判斷使用者所處的具體位置,位置資訊用經緯度表示。

    定位服務是地理位置服務的基礎。Android提供了多種定位手段。

定位服務架構

Android的位置資訊,是通過不同的位置資訊源來提供的,表示位置資訊源的對象派生自LocationProvider。通過硬體收集資訊,轉換成位置資訊。

    Android的位置資訊服務LocationProviderService,用來管理所有的位置資訊源,并通過這些資訊源向請求者提供目前的位置資訊。位置資訊服務運作在系統核心程序的獨立線程中,在服務初始化時,根據配置資訊執行個體化系統中預設的定位資訊源對象。

    調用元件可以使用LocationManager擷取目前的位置資訊,LocationManager.getLastKnownLocation擷取最近一次系統進行定位儲存的資訊。如果需要擷取最新的位置資訊,則要請求更新并監聽目前位置資訊的變化LOcationListener。

    更新并監聽目前位置資訊的變化一般在Activity.onResume進行。登出監聽在Activity.onPause進行。

    位置資訊變更事件的注冊需要調用LocationManager.requestLocationUpdates函數。

位置資訊源

定位服務依托于多個不同的位置資訊源,每個位置資訊源對象都在獨立的線程中運作。與位置服務通過Socket通信,并傳遞位置資訊。

    最基本的位置資訊源,是依托GPS資訊來确定裝置的位置。GSP的擷取需要底層裝置的支援,但受硬體限制和抗幹擾差。是以Android提供了另一種定位服務。

    基于網絡的定位服務。定位資訊源對象會手機移動裝置周邊WIfi和基站資訊,并通過網絡發送至Google的定位服務。Google服務根據收集來的海量Wifi位址,基站位址和經緯度關系計算出目前的位置資訊并傳回使用者。

定位的選擇

選擇位置資訊源進行定位的依據是依照預設的标準,從衆多定位資訊源選擇一個最好的提供定位。

利用LocationManager.getBestProvider得到name,再用LocationManager.getProvide(name)得到LocationProvider。

另一種方式是動态定位