搜索地址功能是建立在能够通过百度地图API获取位置的基础上
package com.zzw.baidumappoint;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private LocationClient mLocationClient;
private BaiduMap mBaiduMap;
private GeoCoder mGeoCoder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());// 使程序不崩溃的作用
setContentView(R.layout.activity_main);
final EditText city_edit = (EditText) findViewById(R.id.city);
final EditText addr_edit = (EditText) findViewById(R.id.addr);
// 获取LocationClient
mLocationClient = new LocationClient(this);
// 获得GeoCoder
mGeoCoder = GeoCoder.newInstance();
mGeoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
}
@Override
public void onGetGeoCodeResult(GeoCodeResult result) {
try{
LatLng ll = result.getLocation();
// 只是完成了定位
MyLocationData locData = new MyLocationData.Builder().latitude(ll.latitude).longitude(ll.longitude)
.build();
// 设置图标在地图上的位置
mBaiduMap.setMyLocationData(locData);
// 开始移动百度地图的定位地点到中心位置
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 16.0f);
mBaiduMap.animateMapStatus(u);
}catch(Exception e){
Toast.makeText(getApplicationContext(), "请检查地址", 0).show();
}
}
});
findViewById(R.id.GO).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
String city = city_edit.getText() + "";
String addr = addr_edit.getText() + "";
city_edit.setText("");
addr_edit.setText("");
mGeoCoder.geocode(new GeoCodeOption().city(city.trim()).address(addr.trim()));
} catch (Exception e) {
}
}
});
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
mLocationClient.setLocOption(option);
// 获取BaiduMap
MapView mapView = (MapView) findViewById(R.id.mapView);
mBaiduMap = mapView.getMap();
// 显示出当前位置的小图标
mBaiduMap.setMyLocationEnabled(true);
MyLocationListener mListener = new MyLocationListener();
mLocationClient.registerLocationListener(mListener);
mLocationClient.start();
}
@Override
protected void onDestroy() {
mLocationClient.stop();
super.onDestroy();
}
private class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// 只是完成了定位
MyLocationData locData = new MyLocationData.Builder().latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
// 设置图标在地图上的位置
mBaiduMap.setMyLocationData(locData);
// 开始移动百度地图的定位地点到中心位置
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 16.0f);
mBaiduMap.animateMapStatus(u);
}
}
}