Android用百度地图定位并返回周边信息

效果图:

Android用百度地图定位并返回周边信息

需要实现的方法:
OnMapStatusChangeListener(地图状态改变的方法)
OnGetGeoCoderResultListener(返回周边数据的方法)
BDLocationListener(定位的方法)

 定义的变量:
    private  BaiduMap baiduMap;
    private  GeoCoder  geoCoder;
    private  Boolean isFirst=true;
    private  List<PoiInfo> list=new ArrayList<>();
    初始化控件:
 private void initMap() {
        baiduMap = map.getMap();
        map.showScaleControl(false);//比例尺隐藏
        map.showZoomControls(false);//缩放隐藏
        baiduMap.setMyLocationEnabled(true);//开启定位层
        baiduMap.setOnMapStatusChangeListener(this);
        LocationClient locationClient = new LocationClient(mContext);
        LocationClientOption locationClientOption = new LocationClientOption();
        locationClientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        locationClientOption.setCoorType("bd09ll");
        locationClientOption.setScanSpan(1000);
        locationClientOption.setIsNeedAddress(true);
        locationClientOption.setIsNeedLocationDescribe(true);
        locationClientOption.setIsNeedLocationPoiList(true);
        locationClientOption.setOpenGps(true);
        locationClient.registerLocationListener(this);
        locationClient.setLocOption(locationClientOption);
        locationClient.start();
         }
 定位 实现的方法:
    @Override
    public void onReceiveLocation(BDLocation bdLocation) {
        if(bdLocation.getLocType()!=BDLocation.TypeServerError){
            if (bdLocation.getLocType() == 61 || bdLocation.getLocType() == 161|| bdLocation.getLocType() == 66) {
               if(isFirst){
                   LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
                   baiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLngZoom(ll,18));
                   isFirst=false;
               }
                geoCoder = GeoCoder.newInstance();
                ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption();
                reverseGeoCodeOption.location(new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude()));
                geoCoder.reverseGeoCode(reverseGeoCodeOption);
                geoCoder.setOnGetGeoCodeResultListener(this);
            } else {
                ToastUtils.showShort("定位失败");
            }
        }else {
            ToastUtils.showShort("定位失败");
        }
    }
    地图状态改变实现的方法:
 @Override
public void onMapStatusChangeFinish(MapStatus mapStatus) {
    LatLng latLng=mapStatus.target;
    geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng));

}
   @Override
  public void onMapStatusChangeStart(MapStatus mapStatus) {
  }
  @Override
  public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
  }
  @Override
    public void onMapStatusChange(MapStatus mapStatus) {
  }
刷新数据实现的方法
 @Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
    if (null != reverseGeoCodeResult) {
        list.clear();
        list.addAll(reverseGeoCodeResult.getPoiList());
        outPositionAdapter.notifyDataSetChanged();
    }
}
 @Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { }