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來說接口的實現使得程序更加簡潔易懂。
以上代碼由本人自己撰寫,如有雷同,純屬巧合,有什麼不妥之處或者需要再優化之處,望各位兄臺不嗇指教。