一 效果图

二 主要代码

BaseActivity.java

package com.itheima.baidumap74;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.UiSettings;
import com.baidu.mapapi.model.LatLng;
import com.itheima.baidumap74.util.Utils;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast;public abstract class BaseActivity extends Activity {private static final String TAG = "BaseActivity";/** 黑马坐标(北京市海淀区东北旺南路45号)*/protected LatLng hmPos = new LatLng(40.050513, 116.30361);/** 传智坐标 */protected LatLng czPos = new LatLng(40.065817,116.349902);/** 天安门坐标 */protected LatLng tamPos = new LatLng(39.915112,116.403963);protected MapView mapView;protected BaiduMap baiduMap;// 这里加final是为了不让子类覆盖,原因是为了预防这里的一些类还没初始化的时候就被子类调用@Overrideprotected final void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取地图控件引用  mapView = (MapView) findViewById(R.id.bmapView); baiduMap = mapView.getMap();    // 获取地图控制器// 1. 隐藏缩放按钮、比例尺// mapView.showScaleControl(false);   // 隐藏比例按钮,默认是显示的// mapView.showZoomControls(false);  // 隐藏缩放按钮,默认是显示的// 2.    获取获取最小(3)、最大缩放级别(20)float maxZoomLevel = baiduMap.getMaxZoomLevel(); // 获取地图最大缩放级别float minZoomLevel = baiduMap.getMinZoomLevel(); // 获取地图最小缩放级别Log.i(TAG, "minZoomLevel = " + minZoomLevel + ", maxZoomLevel" + maxZoomLevel);// 3.  设置地图中心点为黑马MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(hmPos);baiduMap.setMapStatus(mapStatusUpdate);// 4.   设置地图缩放为15mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);baiduMap.setMapStatus(mapStatusUpdate);// 6.  获取地图Ui控制器:隐藏指南针// UiSettings uiSettings = baiduMap.getUiSettings();// uiSettings.setCompassEnabled(false);  //  不显示指南针init();}/** 这个方法让子类实现 */public abstract void init();/*** 在屏幕中央显示一个Toast* @param text*/public void showToast(CharSequence text) {Utils.showToast(this, text);}@Override  protected void onDestroy() {  super.onDestroy();  //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  mapView.onDestroy();  } @Override  protected void onResume() {  super.onResume();  //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  mapView.onResume();  }  @Override  protected void onPause() {  super.onPause();  //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  mapView.onPause();  }
}

CircelOverlayActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.map.CircleOptions;
import com.baidu.mapapi.map.Stroke;public class CircelOverlayActivity extends BaseActivity {@Overridepublic void init() {CircleOptions options = new CircleOptions(); // 创建一个圆形覆盖物的参数options.center(hmPos)    // 圆心.radius(1000)  // 半径.stroke(new Stroke(20, 0x55FF0000))// 线条宽度、颜色.fillColor(0x5500FF00);   // 圆的填充颜色baiduMap.addOverlay(options);  // 添加一个覆盖物}}

DemoListActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.SDKInitializer;
import com.itheima.baidumap74.util.Utils;import android.app.ListActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;public class DemoListActivity extends ListActivity {private BroadcastReceiver receiver;private ClassAndName[] datas = {new ClassAndName(HelloBaiduMapActivity.class, "HelloBaiduMap"),new ClassAndName(MapLayerActivity.class, "地图图层"),new ClassAndName(CircelOverlayActivity.class, "圆形覆盖物"),new ClassAndName(TextOverlayActivity.class, "文字覆盖物"),new ClassAndName(MarkerOverlayActivity.class, "标志覆盖物"),new ClassAndName(SearchInBoundActivity.class, "在范围内搜索"),new ClassAndName(SearchInCityActivity.class, "在城市内搜索"),new ClassAndName(SearchInNearbyActivity.class, "在周边内搜索"),new ClassAndName(DrivingSearchActivity.class, "驾车路线搜索"),new ClassAndName(TransitSearchActivity.class, "换乘路线搜索"),new ClassAndName(WalkingSearchActivity.class, "步行路线搜索"),new ClassAndName(LocationActivity.class, "定位"),};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);registerSDKCheckReceiver();ArrayAdapter<ClassAndName> adapter = new ArrayAdapter<DemoListActivity.ClassAndName>(this, android.R.layout.simple_list_item_1, datas);setListAdapter(adapter);}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {// 取出单击位置的ClassAndNameClassAndName classAndName = (ClassAndName) l.getItemAtPosition(position);startActivity(new Intent(this, classAndName.clazz));}class ClassAndName {/** 用于保存Activity的字节码 */public Class<?> clazz;/** 用于保存Activity对应的名字 */public String name;public ClassAndName(Class<?> cls, String name) {this.clazz = cls;this.name = name;}@Overridepublic String toString() {return name;}}private void registerSDKCheckReceiver() {receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR.equals(action)) {Utils.showToast(DemoListActivity.this, "网络错误");} else if (SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR.equals(action)) {Utils.showToast(DemoListActivity.this, "key验证失败");}}};IntentFilter filter = new IntentFilter();// 监听网络错误filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);// 监听百度地图sdk 的key是否正确filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);registerReceiver(receiver, filter);}@Overrideprotected void onDestroy() {unregisterReceiver(receiver);super.onDestroy();}
}

DrivingSearchActivity.java

package com.itheima.baidumap74;import java.util.ArrayList;
import java.util.List;import com.baidu.mapapi.overlayutil.DrivingRouteOverlay;
import com.baidu.mapapi.search.route.DrivingRouteLine;
import com.baidu.mapapi.search.route.DrivingRoutePlanOption;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;public class DrivingSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.drivingSearch(getSearchParams());}private DrivingRoutePlanOption getSearchParams() {DrivingRoutePlanOption params = new DrivingRoutePlanOption();List<PlanNode> nodes = new ArrayList<PlanNode>();nodes.add(PlanNode.withCityNameAndPlaceName("北京市", "天安门"));params.from(PlanNode.withLocation(hmPos));  // 设置起点params.passBy(nodes);                        // 设置途经点params.to(PlanNode.withLocation(czPos));    // 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {DrivingRouteOverlay overlay = new DrivingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<DrivingRouteLine> routeLines = result.getRouteLines();  // 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));   // 把搜索结果设置到覆盖物overlay.addToMap();                   // 把搜索结果添加到地图overlay.zoomToSpan();              // 把搜索结果在一个屏幕内显示完}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {}}

HelloBaiduMapActivity.java

package com.itheima.baidumap74;import android.util.Log;
import android.view.KeyEvent;import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;public class HelloBaiduMapActivity extends BaseActivity {private static final String TAG = "HelloBaiduMapActivity";@Overridepublic void init() {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// 5.  更新地图状态MapStatusUpdate mapStatusUpdate = null;switch (keyCode) {case KeyEvent.KEYCODE_1://      1)  缩小mapStatusUpdate = MapStatusUpdateFactory.zoomOut();break;case KeyEvent.KEYCODE_2://      2)  放大mapStatusUpdate = MapStatusUpdateFactory.zoomIn();break;case KeyEvent.KEYCODE_3://       3)  旋转(0 ~ 360),每次在原来的基础上再旋转30度MapStatus currentMapStatus = baiduMap.getMapStatus();  // 获取地图当前的状态float rotate = currentMapStatus.rotate + 30;Log.i(TAG, "rotate = " + rotate);MapStatus mapStatus = new MapStatus.Builder().rotate(rotate).build();mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);break;case KeyEvent.KEYCODE_4://         4)  俯仰(0 ~ -45),每次在原来的基础上再俯仰-5度currentMapStatus = baiduMap.getMapStatus();    // 获取地图当前的状态float overlook = currentMapStatus.overlook - 5;Log.i(TAG, "overlook = " + overlook);mapStatus = new MapStatus.Builder().overlook(overlook).build();mapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);break;case KeyEvent.KEYCODE_5://         5)  移动mapStatusUpdate = MapStatusUpdateFactory.newLatLng(czPos);baiduMap.animateMapStatus(mapStatusUpdate, 2000);return super.onKeyDown(keyCode, event);}baiduMap.setMapStatus(mapStatusUpdate);return super.onKeyDown(keyCode, event);}}

LocationActivity.java

package com.itheima.baidumap74;
import java.util.List;import android.util.Log;
import android.view.KeyEvent;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.location.Poi;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;public class LocationActivity extends BaseActivity {public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();public class MyLocationListener implements BDLocationListener {// 在这个方法里面接收定位结果@Overridepublic void onReceiveLocation(BDLocation location) {if (location != null) {MyLocationData.Builder builder = new MyLocationData.Builder();builder.accuracy(location.getRadius());       // 设置精度builder.direction(location.getDirection());  // 设置方向builder.latitude(location.getLatitude());    // 设置纬度builder.longitude(location.getLongitude());  // 设置经度MyLocationData locationData = builder.build();baiduMap.setMyLocationData(locationData); // 把定位数据显示到地图上}//Receive LocationStringBuffer sb = new StringBuffer(256);sb.append("time : ");sb.append(location.getTime());sb.append("\nerror code : ");sb.append(location.getLocType());sb.append("\nlatitude : ");sb.append(location.getLatitude());sb.append("\nlontitude : ");sb.append(location.getLongitude());sb.append("\nradius : ");sb.append(location.getRadius());if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果sb.append("\nspeed : ");sb.append(location.getSpeed());// 单位:公里每小时sb.append("\nsatellite : ");sb.append(location.getSatelliteNumber());sb.append("\nheight : ");sb.append(location.getAltitude());// 单位:米sb.append("\ndirection : ");sb.append(location.getDirection());// 单位度sb.append("\naddr : ");sb.append(location.getAddrStr());sb.append("\ndescribe : ");sb.append("gps定位成功");} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果sb.append("\naddr : ");sb.append(location.getAddrStr());//运营商信息sb.append("\noperationers : ");sb.append(location.getOperators());sb.append("\ndescribe : ");sb.append("网络定位成功");} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果sb.append("\ndescribe : ");sb.append("离线定位成功,离线定位结果也是有效的");} else if (location.getLocType() == BDLocation.TypeServerError) {sb.append("\ndescribe : ");sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");} else if (location.getLocType() == BDLocation.TypeNetWorkException) {sb.append("\ndescribe : ");sb.append("网络不同导致定位失败,请检查网络是否通畅");} else if (location.getLocType() == BDLocation.TypeCriteriaException) {sb.append("\ndescribe : ");sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");}sb.append("\nlocationdescribe : ");sb.append(location.getLocationDescribe());// 位置语义化信息List<Poi> list = location.getPoiList();// POI数据if (list != null) {sb.append("\npoilist size = : ");sb.append(list.size());for (Poi p : list) {sb.append("\npoi= : ");sb.append(p.getId() + " " + p.getName() + " " + p.getRank());}}Log.i("BaiduLocationApiDem", sb.toString());}}@Overridepublic void init() {mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类mLocationClient.registerLocationListener(myListener);    //注册监听函数initLocation();baiduMap.setMyLocationEnabled(true); // 开启定位图层setMyLocationConfigeration(MyLocationConfiguration.LocationMode.COMPASS);mLocationClient.start();  // 开始定位}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_1: // 罗盘态,显示定位方向圈,保持定位图标在地图中心setMyLocationConfigeration(MyLocationConfiguration.LocationMode.COMPASS);break;case KeyEvent.KEYCODE_2: // 跟随态,保持定位图标在地图中心setMyLocationConfigeration(MyLocationConfiguration.LocationMode.FOLLOWING);break;case KeyEvent.KEYCODE_3:  // 普通态: 更新定位数据时不对地图做任何操作setMyLocationConfigeration(MyLocationConfiguration.LocationMode.NORMAL);break;default:break;}return super.onKeyDown(keyCode, event);}/** 设置定位图层的配置 */private void setMyLocationConfigeration(MyLocationConfiguration.LocationMode mode) {boolean enableDirection = true;    // 设置允许显示方向BitmapDescriptor customMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);  // 自定义定位的图标MyLocationConfiguration config = new MyLocationConfiguration(mode, enableDirection, customMarker);baiduMap.setMyLocationConfigeration(config);}@Overrideprotected void onDestroy() {mLocationClient.stop();        // 停止定位super.onDestroy();}private void initLocation(){LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系int span= 5000;option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要option.setOpenGps(true);//可选,默认false,设置是否使用gpsoption.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要mLocationClient.setLocOption(option);}}

MapLayerActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.map.BaiduMap;import android.view.KeyEvent;public class MapLayerActivity extends BaseActivity {@Overridepublic void init() {}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_1:// 显示普通地图baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_2:// 显示卫星图baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);baiduMap.setTrafficEnabled(false);break;case KeyEvent.KEYCODE_3:// 交通图baiduMap.setTrafficEnabled(true);break;}return super.onKeyDown(keyCode, event);}}

MarkerOverlayActivity.java

package com.itheima.baidumap74;import android.view.View;
import android.widget.TextView;import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BaiduMap.OnMarkerDragListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.MapViewLayoutParams.ELayoutMode;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;public class MarkerOverlayActivity extends BaseActivity {private View pop;private TextView tv_title;@Overridepublic void init() {initMarker();baiduMap.setOnMarkerClickListener(mOnMarkerClickListener);baiduMap.setOnMarkerDragListener(mOnMarkerDragListener);}/** 标志拖动监听器 */OnMarkerDragListener mOnMarkerDragListener = new OnMarkerDragListener() {/** 标志开始拖动 */@Overridepublic void onMarkerDragStart(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}/** 标志拖动结束 */@Overridepublic void onMarkerDragEnd(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}/** 标志正在拖动 */@Overridepublic void onMarkerDrag(Marker marker) {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}};OnMarkerClickListener mOnMarkerClickListener = new OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {// 显示一个泡泡if (pop == null) {pop = View.inflate(MarkerOverlayActivity.this, R.layout.pop, null);tv_title = (TextView) pop.findViewById(R.id.tv_title);mapView.addView(pop, createLayoutParams(marker.getPosition()));} else {mapView.updateViewLayout(pop, createLayoutParams(marker.getPosition()));}tv_title.setText(marker.getTitle());return true;}};/** 初始化标志 */private void initMarker() {MarkerOptions options = new MarkerOptions();BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.icon_eat);options.position(hmPos)       // 位置.title("黑马")     // title.icon(icon)         // 图标.draggable(true);  // 设置图标可以拖动baiduMap.addOverlay(options);// 添加一个向北的标志options = new MarkerOptions().icon(icon).title("向北").position(new LatLng(hmPos.latitude + 0.001, hmPos.longitude)).draggable(true);baiduMap.addOverlay(options);// 添加一个向东的标志options = new MarkerOptions().icon(icon).title("向东").position(new LatLng(hmPos.latitude, hmPos.longitude + 0.001)).draggable(true);baiduMap.addOverlay(options);// 添加一个向西南的标志options = new MarkerOptions().icon(icon).title("向西南").position(new LatLng(hmPos.latitude - 0.001, hmPos.longitude - 0.001)).draggable(true);baiduMap.addOverlay(options);}/*** 创建一个布局参数* @param position* @return*/private MapViewLayoutParams createLayoutParams(LatLng position) {MapViewLayoutParams.Builder buidler = new MapViewLayoutParams.Builder(); buidler.layoutMode(ELayoutMode.mapMode);    // 指定坐标类型为经纬度buidler.position(position);        // 设置标志的位置buidler.yOffset(-25);         // 设置View往上偏移MapViewLayoutParams params = buidler.build();return params;}}

MyApplication.java

package com.itheima.baidumap74;import android.app.Application;import com.baidu.mapapi.SDKInitializer;public class MyApplication extends Application {@Overridepublic void onCreate() {//在使用SDK各组件之前初始化context信息,传入ApplicationContext  //注意该方法要再setContentView方法之前实现  SDKInitializer.initialize(getApplicationContext()); }}

PoiSearchBaseActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.overlayutil.PoiOverlay;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;public abstract class PoiSearchBaseActivity extends BaseActivity implements OnGetPoiSearchResultListener{protected PoiSearch poiSearch;protected PoiOverlay poiOverlay;@Overridepublic final void init() {// 因为其它搜索也需要这个实例,所以放在父类初始,这样的话子类就不需要再实例化poiSearch = PoiSearch.newInstance();poiSearch.setOnGetPoiSearchResultListener(this);poiOverlay = new PoiOverlay(baiduMap) {@Overridepublic boolean onPoiClick(int index) {return PoiSearchBaseActivity.this.onPoiClick(index);}};baiduMap.setOnMarkerClickListener(poiOverlay);poiSearchInit();}/*** 生成这个方法,是为了让子类可以覆盖* @param index* @return*/public boolean onPoiClick(int index) {PoiInfo poiInfo = poiOverlay.getPoiResult().getAllPoi().get(index);showToast(poiInfo.name + ", " + poiInfo.address);return true;}/** poi搜索的初始化代码写在这个方法 */public abstract void poiSearchInit();// 因为其它搜索结果的处理都是相同的,所以放在父类/** 获取兴趣点信息 */@Overridepublic void onGetPoiResult(PoiResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {showToast("没有搜索到结果");return;}poiOverlay.setData(result);    // 把数据设置给覆盖物poiOverlay.addToMap();      // 把所有的数据的变成覆盖添加到BaiduMappoiOverlay.zoomToSpan();   // 把所有的搜索结果在一个屏幕内显示出来}}

RoutePlanSearchBaseActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
import com.baidu.mapapi.search.route.RoutePlanSearch;public abstract class RoutePlanSearchBaseActivity extends BaseActivity implements OnGetRoutePlanResultListener {protected RoutePlanSearch routePlanSearch;@Overridepublic void init() {routePlanSearch = RoutePlanSearch.newInstance();routePlanSearch.setOnGetRoutePlanResultListener(this);routePlanSearchInit();}/** 路径搜索初化代码写在这个方法 中*/public abstract void routePlanSearchInit();}

SearchInBoundActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import com.baidu.mapapi.search.poi.PoiBoundSearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;public class SearchInBoundActivity extends PoiSearchBaseActivity {@Overridepublic void poiSearchInit() {poiSearch.searchInBound(getSearchParams());}private PoiBoundSearchOption getSearchParams() {PoiBoundSearchOption params = new PoiBoundSearchOption();// 指定搜索范围,由一个西南点和一个东北点组成的范围LatLngBounds bounds = new LatLngBounds.Builder().include(new LatLng(40.048459,116.302072)).include(new LatLng(40.050675,116.304317)).build();params.bound(bounds); // 指定搜索范围params.keyword("加油站");   // 指定搜索什么内容return params;}/** 获取兴趣点详情信息 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}}

SearchInCityActivity.java

package com.itheima.baidumap74;import android.view.KeyEvent;import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchOption;public class SearchInCityActivity extends PoiSearchBaseActivity {private int pageNum;@Overridepublic void poiSearchInit() {poiSearch.searchInCity(getSearchParams());}@Overridepublic boolean onPoiClick(int index) {// 当点击一个搜索出来的兴趣点的时候,再去搜索更详细的内容PoiInfo poiInfo = poiOverlay.getPoiResult().getAllPoi().get(index);poiSearch.searchPoiDetail(getSearchDetailParams(poiInfo.uid));return true;}private PoiDetailSearchOption getSearchDetailParams(String poiUid) {PoiDetailSearchOption params = new PoiDetailSearchOption();params.poiUid(poiUid);return params;}private PoiCitySearchOption getSearchParams() {PoiCitySearchOption params = new PoiCitySearchOption();params.city("北京");            // 指定在哪个城市内进行搜索params.keyword("加油站");     // 指定搜索的是什么内容params.pageCapacity(10);   // 设置一页获取10条数据params.pageNum(pageNum);  // 指定获取哪一页return params;}/** 获取到详情信息的回调方法 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {showToast("没有搜索到详情信息");return ;}showToast(result.getShopHours() + ", " + result.getTelephone());}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_1) {// 获取下一页数据pageNum++;poiSearch.searchInCity(getSearchParams());}return super.onKeyDown(keyCode, event);}}

SearchInNearbyActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiNearbySearchOption;/*** 在周边搜索* @author dzl**/
public class SearchInNearbyActivity extends PoiSearchBaseActivity {@Overridepublic void poiSearchInit() {poiSearch.searchNearby(getSearchParams());}private PoiNearbySearchOption getSearchParams() {PoiNearbySearchOption params = new PoiNearbySearchOption();params.location(hmPos);   // 指定在哪个位置搜索params.radius(1000);    // 指定搜索范围params.keyword("建设银行");  // 指定搜索的内容return params;}/** 获取兴趣点详情信息 */@Overridepublic void onGetPoiDetailResult(PoiDetailResult result) {}}

TextOverlayActivity.java

package com.itheima.baidumap74;import com.baidu.mapapi.map.TextOptions;public class TextOverlayActivity extends BaseActivity {@Overridepublic void init() {TextOptions options = new TextOptions();options.position(hmPos)         // 位置.text("黑马程序员")           // 文字内容.fontSize(20)            // 文字大小.fontColor(0XFF000000)   // 文字颜色.bgColor(0X55FF0000) // 背景颜色.rotate(30);         // 旋转baiduMap.addOverlay(options);}}

TransitSearchActivity.java

package com.itheima.baidumap74;import java.util.List;import com.baidu.mapapi.overlayutil.TransitRouteOverlay;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.TransitRouteLine;
import com.baidu.mapapi.search.route.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.TransitRoutePlanOption.TransitPolicy;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRouteResult;/*** 换乘路线搜索(公交、地铁)* @author dzl**/
public class TransitSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.transitSearch(getSearchParams());}private TransitRoutePlanOption getSearchParams() {TransitRoutePlanOption params = new TransitRoutePlanOption();params.city("北京"); // 设置在哪个城市内搜索params.policy(TransitPolicy.EBUS_TIME_FIRST);// 设置策略为:时间优先params.from(PlanNode.withLocation(hmPos));    // 设置起点params.to(PlanNode.withLocation(czPos)); // 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {TransitRouteOverlay overlay = new TransitRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<TransitRouteLine> routeLines = result.getRouteLines();  // 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));   // 把搜索结果设置到覆盖物overlay.addToMap();                   // 把搜索结果添加到地图overlay.zoomToSpan();              // 把搜索结果在一个屏幕内显示完}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {}}

WalkingSearchActivity.java

package com.itheima.baidumap74;import java.util.List;import com.baidu.mapapi.overlayutil.TransitRouteOverlay;
import com.baidu.mapapi.overlayutil.WalkingRouteOverlay;
import com.baidu.mapapi.search.route.DrivingRouteResult;
import com.baidu.mapapi.search.route.PlanNode;
import com.baidu.mapapi.search.route.TransitRouteLine;
import com.baidu.mapapi.search.route.TransitRoutePlanOption;
import com.baidu.mapapi.search.route.WalkingRouteLine;
import com.baidu.mapapi.search.route.TransitRoutePlanOption.TransitPolicy;
import com.baidu.mapapi.search.route.TransitRouteResult;
import com.baidu.mapapi.search.route.WalkingRoutePlanOption;
import com.baidu.mapapi.search.route.WalkingRouteResult;/*** 步行路线搜索* @author dzl**/
public class WalkingSearchActivity extends RoutePlanSearchBaseActivity {@Overridepublic void routePlanSearchInit() {routePlanSearch.walkingSearch(getSearchParams());}private WalkingRoutePlanOption getSearchParams() {WalkingRoutePlanOption params = new WalkingRoutePlanOption();params.from(PlanNode.withLocation(hmPos));   // 设置起点params.to(PlanNode.withLocation(czPos)); // 设置终点return params;}/** 获取驾车搜索结果的回调方法 */@Overridepublic void onGetDrivingRouteResult(DrivingRouteResult result) {}/** 获取换乘(公交、地铁)搜索结果的回调方法 */@Overridepublic void onGetTransitRouteResult(TransitRouteResult result) {}/** 获取步行搜索结果的回调方法 */@Overridepublic void onGetWalkingRouteResult(WalkingRouteResult result) {WalkingRouteOverlay overlay = new WalkingRouteOverlay(baiduMap);baiduMap.setOnMarkerClickListener(overlay);List<WalkingRouteLine> routeLines = result.getRouteLines();   // 获取到所有的搜索路线,最优化的路线会在集合的前面overlay.setData(routeLines.get(0));   // 把搜索结果设置到覆盖物overlay.addToMap();                   // 把搜索结果添加到地图overlay.zoomToSpan();              // 把搜索结果在一个屏幕内显示完}}

Utils.java

package com.itheima.baidumap74.util;import android.content.Context;
import android.view.Gravity;
import android.widget.Toast;public class Utils {/*** 在屏幕中央显示一个Toast* @param text*/public static void showToast(Context context, CharSequence text) {Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();}}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.itheima.baidumap74"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 这个权限用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" ></uses-permission><!-- 这个权限用于访问GPS定位 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission><!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission><!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission><!-- 用于读取手机当前的状态 --><uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission><!-- 访问网络,网络定位需要上网 --><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡读取权限,用户写入离线定位数据 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" ></uses-permission><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" android:name=".MyApplication"><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="SU4uGcWV9y89olrB6SNtfFWBrWW7L8vX" /><activityandroid:name=".DemoListActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name=".HelloBaiduMapActivity"/><activity android:name=".MapLayerActivity"/><activity android:name=".CircelOverlayActivity"/><activity android:name=".TextOverlayActivity"/><activity android:name=".MarkerOverlayActivity"/><activity android:name=".SearchInBoundActivity"/><activity android:name=".SearchInCityActivity"/><activity android:name=".SearchInNearbyActivity"/><activity android:name=".DrivingSearchActivity"/><activity android:name=".TransitSearchActivity"/><activity android:name=".WalkingSearchActivity"/><activity android:name=".LocationActivity"/><service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service></application></manifest>

三 总结

获取JavaAPI 服务方法,首先申请密钥(apk),才可成功加载API文件。

Android地图定位-百度地图上定位自己所在的位置相关推荐

  1. Android Studio调用百度地图(二):实现地图显示后台定位和步行导航

    先看一下运行效果: 实现功能:后台定位+步行导航(可通过长按屏幕自定义终点,起点为定位点) 后台定位即当程序在后台时依旧执行定位功能,步行导航支持30米-50千米范围内的导航 一 导入SDK并配置相关 ...

  2. Android开发之百度地图定位打卡

    Android开发之百度地图定位打卡 一.效果图 二.下载百度地图SDK 三.代码实现 1.布局文件(activity_main) 2.布局文件(activity_map) 3.在res文件夹下新建m ...

  3. Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细介绍

    ***转载.引用请标明出处*** http://www.jianshu.com/p/29ccac3e1e42 本文出自[zhh_happig的简书博客](http://www.jianshu.com/ ...

  4. android 百度地图拖动定位,百度地图获取定位,实现拖动marker定位,返回具体的位置名...

    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑"; ...

  5. Android开发之百度地图定位

    Android开发之百度地图定位 一.效果图 二.下载百度地图SDK 1.打开[百度地图](https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9% ...

  6. 百度地图离线_高德地图与百度地图有啥区别?功能只是其次,定位才是重点

    如今,生活离不开手机,而行程又离不开导航app,中国那么大,许多人都有过这样的疑问?那就是在没有导航的时代,人们是怎样出行的呢?在小编看来,那是由于当时道路线较少,故此,走的人多了,也就熟了. 现在, ...

  7. JQ----移动端h5页面通过地址调起通讯录以及高德地图、百度地图定位导航

    JQ----移动端h5页面通过地址调起通讯录以及高德地图.百度地图定位导航 通讯录: 可先加meta标签 <a href="tel:13838383838" class=&q ...

  8. php调用百度地图定位,百度地图API使用方法详解

    最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. 示例一: body, html,#allmap {width: 100%;height: ...

  9. 移动端h5页面通过地址调起高德地图、百度地图定位导航

    以下是通过点击a标签进行地图的调起的 高德: <a href="https://uri.amap.com/marker?position=经度,纬度&name=所在的位置名称& ...

  10. android 仿百度地图,仿百度地图街景实现

    使用过百度地图的同学知道,它有个街景功能,可以看到许多地方的实景.这里就其街景内容的实现,进行下学习. 在百度地图SDK的官网上可以看到,百度对开发者提供了很多相关的内容,方便我们进行学习.关于SDK ...

最新文章

  1. Java里的数组介绍
  2. 全球及中国无菌粉末注射用橡胶塞行业运营模式分析及产销需求预测报告2021年版
  3. 30个HTML标签,HTML常用标签的使用 --2019年8月30日
  4. HTML郑州宅急送试题
  5. 米聊PK微信:微信是一朵奇葩
  6. 由浅到深理解ROS(5.1)- roslaunch 学习
  7. libjpeg移植到arm
  8. Anaconda创建虚拟环境报错—UnavailableInvalidChannel: The channel is not accessible or is invalid
  9. 读取P12格式证书的密钥
  10. 移动数据通信网络工作原理(SGSNGGSN)
  11. python 发邮件 抄送_Python 发送 email 的三种方式
  12. WORD VBA实现查找带格式的文字并复制到特定地方
  13. ANSYS018.1案例 三维冷热水混合器流体仿真
  14. FPGA数字图像处理
  15. 我的世界我服务器注册密码大全,网易账号密码大全我的世界 | 手游网游页游攻略大全...
  16. android使用google gcm接收push消息需要注意的地方
  17. day16多线程网络编程日志枚举
  18. ShaderLearning_1_理论渲染管线和GPU渲染管线
  19. SM8S36CA-汽车TVS瞬态抑制二极管
  20. python关键词挖掘_关键词挖掘,挖掘关键词的方法

热门文章

  1. 波前边缘检测 Wavefront Frontier Detector
  2. 32 Qt 之绘图之绘制一个漂亮的西瓜
  3. JavaScript中事件的绑定与解绑
  4. three.js 控制动画进度 进度条拖拽控制
  5. 微软的exchange服务器和域怎么填,配置远程域属性: Exchange 2010 帮助 | Microsoft Docs...
  6. xshell 密钥身份验证_使用密钥斗篷和大使边缘堆栈进行集中式身份验证
  7. switch语言的应用
  8. C#服务端的微信小游戏——多人在线角色扮演(六)
  9. 轻松学编曲,论FL钢琴卷帘
  10. 逃离x86架构-----CPU体系结构CISC与RISC之争