天天看點

[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題

of interest)搜尋。該篇講述定位目前自己的位置及使用getlastknownlocation擷取location總時為空值的問題。

      定位目前位置可以通過lbs(location based service,基于位置的服務),主要工作原理是利用無線網絡network或gps定位方式确定移動裝置所在的位置。

      其基本步驟如下:(參考郭神《android第一行代碼》)

      1.先執行個體locationmanager,getsystemservice(context.location_service)再确定擷取系統的定位服務;

      2.選擇位置提供器,通常會使用locationmanager.network_provider網絡定位(精準度差、耗電少)或locationmanager.gps_provider實作gps定位(精準度高、耗電多);

      3.然後通過locationmanager的getlastknownlocation()函數,它選擇位置提供器provider得到location對象;

      4.此時你已經擷取了地理位置,如果手機移動可以通過locationmanager的另一個函數requestlocationupdates()方法擷取動态的位置資訊;

      5.擷取目前location後需要加載到百度地圖中,可以通過geopoint設定目前位置經度和緯度,并使用mylocationoverlay載入該資料及添加目前位置覆寫物。

      其核心代碼如下所示:

     運作效果如下圖所示:

[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題

      但是此時你可能會遇到兩個問題:

      第一個問題是有時候百度地圖不能定位到目前位置,究其原因我發現代碼擷取的location總為空值,即:

      location location = locationmanager.getlastknownlocation(provider);

      第二個問題就是在能定位目前位置的情況下,擷取的位置總是存在偏移,向左下方偏移一定方位。

      其中第一個問題在getlastknownlocation(provider)總是擷取null,據說是該函數擷取的是上一次location,而且它不是一次就能定位成功的,需要多次定位才能實作。通過在getlastknownlocation()函數後添加循環多次定位如下代碼:

     但是很遺憾的是我采用這種方法并沒有解決該問題,這就引出了“三.定位目前位置(源碼)”内容。通過另外一種百度地圖擷取目前位置的方法實作,通過設定locationclient擷取,而且能解決這裡提到的兩個問題且相對精确的實作定位。

     此種方法參考xiaanming大神的部落格,推薦大家閱讀,講述的非常好尤其是其實作細節,我主要是闡述該問題及提供一個可行方法罷了。

     主要通過locsdk的locationclient實作顯示目前位置,同時此種方法如果遇到沒有顯示地圖。其原因是:首先需要在androidmanifest.xml中添加如下代碼。

      1.運作效果如下圖所示。

      它能擷取目前位置,并且通過監聽函數5秒間隔擷取一次;

      public class bdlocationlistenerimpl implements bdlocationlistener

      在監聽函數中富國flag!=1表示沒有點選“定位”按鈕則不實作監聽定位目前位置功能;同時結合前面第二篇文章poi搜尋及城市定位功能。

[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題
[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題

      2.注意需要引入sdk包括locsdk_3.1.jar和liblocsdk3.so,其工程結構如下所示:

[android] 百度地圖開發 (三).定位目前位置及getLastKnownLocation擷取location總為空問題

      3.mainactivity.java檔案

     4.布局檔案activity_main.xml,同時添加圖檔left.png、middle.png和right.png

      5.設定androidmainfest.xml權限及服務,同時設定百度地圖apikey,第一篇文章有詳細講述。

      最後希望文章對大家有所幫助,剛剛接觸android開發百度地圖,而且還是使用v2.4.1版本,如果有錯誤或不足之處,還請海涵!建議大家看看官方文檔和百度提供的demo.文章主要參考百度官方文檔、xiaanming大神部落格和郭神《android第一行代碼》及我前面的兩篇文章.