百度地圖學習(II)-Android端的定位

哎,經歷了小編的最近時間的研究,個人百度定位終於成功啦,剎那間以爲本身萌萌噠啦(~ ̄▽ ̄)~php

話很少說,直接進入正題:html

首先,咱們來看一下效果:java

lbs

 

【分析定位原理】android

分析

 

【編碼分析】git

1)處理程序的清單文件:url(http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0);網絡

2)增長佈局信息:此處只有一個按鈕和一個文本信息app

3)編寫java代碼:ide

public class MainActivity extends Activity {
    private Button btn_lbs=null;
    private TextView show_lbs=null;
    private LocationClient locationClient=null;
    private static final int UPDATE_TIME=5000;  //更新頻率
    private static int LOCATION_COUNTS=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_lbs=(Button)findViewById(R.id.btn_lbs);
        show_lbs=(TextView)findViewById(R.id.show_lbs);
        
        locationClient =new LocationClient(this); 
        //設置定位條件
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationMode.Hight_Accuracy);//設置高精度定位定位模式
        option.setCoorType("bd09ll");//設置百度經緯度座標系格式
        option.setScanSpan(UPDATE_TIME);//設置發起定位請求的間隔時間爲1000ms
        option.setIsNeedAddress(true);//反編譯得到具體位置,只有網絡定位才能夠
        locationClient.setLocOption(option);  //講option的初始化信息添加到客戶端
        
        //註冊位置的監聽事件
        locationClient.registerLocationListener(new BDLocationListener() {
            
            @Override
            public void onReceiveLocation(BDLocation location) {
                // 定位回調信息
                if(location==null){
                    return;
                }
                StringBuffer sb=new StringBuffer();
                sb.append("Time : ");
                sb.append(location.getTime());  
                sb.append("\nError code : ");
                sb.append(location.getLocType());  //獲取定位類型
                   sb.append("\nLatitude : ");
                sb.append(location.getLatitude());  // 獲取緯度座標
                   sb.append("\nLontitude : ");
                sb.append(location.getLongitude()); //獲取精度座標
                   sb.append("\nRadius : ");
                sb.append(location.getRadius()); //獲取定位精度
                if (location.getLocType() == BDLocation.TypeGpsLocation){
                    sb.append("\nSpeed : ");
                    sb.append(location.getSpeed());  //獲取速度,僅gps定位結果時有速度信息
                    sb.append("\nSatellite : ");
                    sb.append(location.getSatelliteNumber());
                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
                    sb.append("\nAddress : ");
                    sb.append(location.getAddrStr());  //獲取詳細地址信息
                }
                LOCATION_COUNTS ++;
                sb.append("\n檢查位置更新次數:");
                sb.append(String.valueOf(LOCATION_COUNTS));
                show_lbs.setText(sb.toString());
            }
        });
        btn_lbs.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                if(locationClient==null){
                    return;
                }
                if(locationClient.isStarted()){
                    btn_lbs.setText("開啓定位");
                    locationClient.stop();
                }else{
                    btn_lbs.setText("關閉定位");
                    locationClient.start();
                    /*
                     *當所設的整數值大於等於1000(ms)時,定位SDK內部使用定時定位模式。
                     *調用requestLocation( )後,每隔設定的時間,定位SDK就會進行一次定位。
                     *若是定位SDK根據定位依據發現位置沒有發生變化,就不會發起網絡請求,
                     *返回上一次定位的結果;若是發現位置改變,就進行網絡請求進行定位,獲得新的定位結果。
                     *定時定位時,調用一次requestLocation,會定時監聽到定位結果。
                     */
                    locationClient.requestLocation();
                }
                
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(locationClient!=null&&locationClient.isStarted())
        {
            locationClient.stop();
            locationClient=null;
        }
    }
}

 

【總結】佈局

因爲小編比較笨拙,因此研究了好長一段時間才解決,以上分析屬於本身的理解網站

LocationClient屬於客戶端,客戶端經過設置位置的監聽事件從而實現位置的得到,切忌注意一點,當程序結束的時候,你的定位的客戶端:LocationClient應該是處於關閉狀態的

 

【附錄】

1.Android SDK官方網站http://developer.baidu.com/map/index.php?title=android-locsdk

2.百度地圖幫助文檔(V5.0):http://developer.baidu.com/map/loc_refer/index.html

3.Android 百度定位得到當前具體位置http://www.2cto.com/kf/201501/373620.html

4.百度Android定位SDK實現獲取當前經緯度及位置 :http://www.open-open.com/lib/view/open1346982366162.html

5. Android定位SDK常見問題:http://developer.baidu.com/map/index.php?title=android-locsdk/qa

相關文章
相關標籤/搜索