首先需要准备的工具:
1、百度地图api下载地址:http://developer.baidu.com/map/sdk-android.htm完整版下载后会有以下的三个文件;
功能不多说,自己结合(docs)文档和(Sample)来了解具体的功能和实现方法。
2、百度秘钥:http://developer.baidu.com/map/android-mobile-apply-key.htm
大部分的对外开放接口都有一个秘钥,百度也不例外,秘钥的申请在官网上有详细的教程,在这里就不浪费文字啰嗦了。
接下来就开始着手项目:
1、导入百度api:
把Lib文件夹下面的jar文件和os文件一并copy到项目的libs包里面,右击项目:Build Path——Configure Build Path
——Libraries——Add JARS把两个包都加载到项目中,接着在Order and Export当中勾选到刚刚导入的两个文件
2、要获取地理位置首先的通过百度地图api来获取百度自己的经纬度,不能使用通过gps获取的经纬度来获取当前地理
位置名称,原因在百度api中有如下解释:
http://developer.baidu.com/map/geosdk-symbian-qa.htm
获取经纬度需要用到LocationClint类,
LocaltionClient中需要设置定位条件,定位条件通过LocationClientOption类来包装,包装好之后LocaltionClient只需要
调用LocaltionClient.setLocOption(LocationClientOption)方法即可,接下来就是注册位置监听器,
locationClient.registerLocationListener在监听器中有两个方法,一看名字就知道我们要用的方法是哪一个,只要在该
方法体中去实现我们的功能,比如获取经纬度等等,当然这样还不够,还需要让LocaltionClient.start()和LocaltionClient.request();
在这两个方法执行之后才能获取到经纬度的值。
其方法如下
public void getLongitdue(){
LocationClient locationClient = new LocationClient(context);
//设置定位条件
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); //是否打开GPS
option.setCoorType("bd09ll"); //设置返回值的坐标类型。
option.setPriority(LocationClientOption.NetWorkFirst); //设置定位优先级
option.setProdName(context.getString(R.string.app_name)); //设置产品线名称。强烈建议您使用自定义的产品线名称,方便我们以后为您提供更高效准确的定位服务。
option.setScanSpan(100);//设置定时定位的时间间隔。单位毫秒
locationClient.setLocOption(option);
//注册位置监听器
locationClient.registerLocationListener(new BDLocationListener() {
public void onReceivePoi(BDLocation arg0) {
}
public void onReceiveLocation(BDLocation location) {
latitude=location.getLatitude();
longitude=location.getLongitude();
}
});
if(locationClient.isStarted()){
locationClient.stop();
}
locationClient.start();
locationClient.requestLocation();
locationClient.requestNotifyLocation();
}
获取到经纬度就方便多了,只需要调用MKsearch类的into()方法和reverseGeocode()方法就可以获取当前的详细位置了。
bMapManager=new BMapManager(context);
bMapManager.init(myApplication.strKey,myApplication.generalListener);
mksearch=new MKSearch();
mksearch.init(bMapManager, new MyMKSearchListener());
getLongitude();
mksearch.reverseGeocode(new GeoPoint((int) ( latitude* 1E6),(int) (longitude * 1E6)));
在MyMKSearchListener当中的 onGetAddrResult()方法中就可获取当前地理位置。