百度地图API之根据经纬度查询地址信息
1.先获取当前的经纬度,再将经纬度转换成详细地址
LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);
/*
* 参数一: 使用什么方式定位 , 基站 、WiFi, gps
* 参数二: 过了多少时间,就更新位置
* 参数三: 过了多少距离就更新位置
*/ manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, new LocationListener() {
//定位方式状态发生了变化
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d(TAG, "onStatusChanged==="+provider);
}
//这种定位方式可用
@Override
public void onProviderEnabled(String provider) {
Log.d(TAG, "onProviderEnabled==="+provider);
}
//这种定位方式不可用
@Override
public void onProviderDisabled(String provider) {
Log.d(TAG, "onProviderDisabled==="+provider);
}
//位置发生了变化,就调用
@Override
public void onLocationChanged(final Location location){
BMapManager mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
//百度地图移动版API提供的搜索服务主要是通过初始化MKSearc类,
//注册搜索结果的监听对象MKSearchListener来实现异步搜索服务。
// 初始化MKSearch
MKSearch mkSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
String longitude = location.getLongitude(); //获取经度
String latitude = location.getLatitude(); //获取纬度
// 查询该经纬度值所对应的地址位置信息
mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));
}
}
2.自定义一个MySearchListener类,它实现MKSearchListener接口,然后通过实现接口中不同的回调方法,来获得对应的搜索结果.
public class MySearchListener implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
if (result == null) {
return;
}
StringBuffer sb = new StringBuffer();
// 经纬度所对应的位置
sb.append(result.strAddr).append("/n");
// 判断该地址附近是否有POI(Point of Interest,即兴趣点)
if (null != result.poiList) {
// 遍历所有的兴趣点信息
for (MKPoiInfo poiInfo : result.poiList) {
sb.append("--------------------------------").append("/n");
sb.append("名称:").append(poiInfo.name).append("/n");
sb.append("地址:").append(poiInfo.address).append("/n");
sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
sb.append("电话:").append(poiInfo.phoneNum).append("/n");
sb.append("邮编:").append(poiInfo.postCode).append("/n");
// poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
sb.append("类型:").append(poiInfo.ePoiType).append("/n");
}
}
// 将地址信息、兴趣点信息显示在TextView上
addressTextView.setText(sb.toString());
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
}
}
3.需要添加的权限
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />