Android 基於百度地圖開發定位以及獲取當前詳細地址(一)

   Android 基於百度地圖開發定位以及獲取當前詳細地址


   百度地圖LBS開發平臺推出了Android SDK接口,包括了Android地圖SDK、Android定位SDK、Android導航SDK、Android全景SDK和Android離線導航等衆多接口。有了百度地圖強大的後臺數據的支撐,爲我們軟件開發提供了更大方便性,不得不感嘆大數據爲我們的生活帶來了更大的便捷性。百度地圖如何在Android平臺上進行配置,這裏就不再贅述,具體的可參照官網鏈接:http://developer.baidu.com/map/index.php?title=androidsdk。

   在這裏,首先講一下如何利用百度地圖來獲取當前的位置信息。由於App開發過程中需要多次獲取當前的定位信息,故本人把這部分封裝成一個單獨的類,如下類LocationHelper

1、創建當前位置定位幫助類:LocationHelper

package com.busleep.baidu;
import android.content.Context;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.busleep.listener.MrLocationListener;

public class LocationHelper {
    
    private LocationClient mLocationClient=null;
    
    /**
     * 接受百度地圖定位的回調類,該類是派生於百度地圖的一個地圖定位的監聽類,用於定位後信息的返回。

     */
    private MyBDLocationListener mMyBDLocationListener=null;
    
    /**
     * 自定義的定位回調接口監聽器,該接口是自定義的一個接口,用於在使用該對象時,把定位信息進行回調;
     */
    private MrLocationListener mLocationListener=null;
    
    private Context ct;
    
    public LocationHelper(Context ct){
        
        this.ct=ct;
    }
    
    /**
     * 設置自定義的監聽器;
     * @param locationListener
     */
    public void setMrLocationListener(MrLocationListener locationListener){
        
        this.mLocationListener=locationListener;
    }
    
    /**
     * 停止定位;
     */
    public void stop(){
        
        if(mLocationClient!=null){
            
            mLocationClient.stop();
        }
    }
    
    /**
     * 啓動定位;
     */
    public void start(){

        //新建百度地圖定位客戶端類;

        mLocationClient=new LocationClient(ct);
        mMyBDLocationListener=new MyBDLocationListener();

        //註冊監聽器;

        mLocationClient.registerLocationListener(mMyBDLocationListener);
       

        //創建定位選項;      

        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);            // 打開gps;
        option.setCoorType("bd09ll");   // 設置座標類型;
        option.setScanSpan(1000);         // 設置定位間隙,每隔1秒定位一次;
        option.setAddrType("all");         // 注意:該參數是設置地址類型,如果不設置就獲取不到地址信息;
        
        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }
    
    /**
     * 實現百度地圖的接口;
     * @author Render;
     *
     */
    public class MyBDLocationListener implements BDLocationListener{

        @Override
        public void onReceiveLocation(BDLocation location) {
            
            if(mLocationListener!=null){

                //回調自定義的監聽對象;

                mLocationListener.onReceiveLocation(location);
            }
        }

        @Override
        public void onReceivePoi(BDLocation arg0) {
            // TODO Auto-generated method stub
            
        }
    }
}

2、創建完該定位幫助類後,接下來就是如何使用該類,本文直接在app的應用對象中進行使用,代碼如下:

package com.busleep.app;

import com.baidu.location.BDLocation;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.model.LatLng;
import com.busleep.baidu.LocationHelper;
import com.busleep.config.Constant;
import com.busleep.listener.MrLocationListener;

import android.app.Application;

/**
 * 自定義的Android的應用類,進行一些接口的初始化操作,如百度地圖;
 * @author Render
 *
 */
public class CustomApplication  extends Application implements MrLocationListener{

    private static CustomApplication mCustomApplication=null;
    
    /**
     * 記錄當前用戶的位置;
     */
    public static BDLocation mLastLocation=null;
   
    /**
     * 定位幫助類;
     */
    private LocationHelper locationHelper=null;
    
    public static CustomApplication getInstance() {
        
        return mCustomApplication;
    }

    public double getLongtitude(){
        
        if(mLastLocation!=null)
        {
            return mLastLocation.getLongitude();
        }
        
        return 0.0;
    }
    
    public double getLatitude() {
        
        if(mLastLocation!=null)
        {
            return mLastLocation.getLatitude();
        }
  
        return 0.0;
    }
    
    /**
     * 獲取當前的位置;
     * @return
     */
    public LatLng getCurrentLatLng(){
        
        return new LatLng(getLatitude(), getLongtitude());
    }
    
    @Override
    public void onCreate() {
        
        super.onCreate();
        
        mCustomApplication=this;
        
        //初始化百度地圖;
        SDKInitializer.initialize(this);
        
        //定位當前用戶的位置;
        locationHelper=new LocationHelper(getApplicationContext());
        
        //設置自定義監聽器;
        locationHelper.setMrLocationListener(this);

        //啓動定位;
        locationHelper.start();
    }
    
    @Override
    public void onReceiveLocation(BDLocation location) {
        
        if(mLastLocation==null){
        
            mLastLocation=location;
            

           //獲取當前城市和當期的詳細地址信息位置;

            Constant.city=location.getCity();
            Constant.address= location.getAddrStr();
        }

        //停止定位;
        locationHelper.stop();
    }

}

3、總結:

        通過把百度地圖的定位功能封裝成單一的LocationHelper類,主要是爲了方便在後續app開發中多次使用,當然各位朋友也可以根據自己的需求來進行使用。

        最後,發表一下感言:由於本人一直是做C++開發,現在也稍微接觸一下Java開發,發現Java中接口真的太好用了,C++中如果實現一個接口需要定義純虛函數來實現,並且是通過派生的方式,或者多繼承的方式,相對於Java來說接口的實現使得程序更加簡潔易懂。

        以上代碼由本人自己撰寫,如有雷同,純屬巧合,有什麼不妥之處或者需要再優化之處,望各位兄臺不嗇指教。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章