1、打开高德开放平台
2、创建应用
3、添加新key: 38:7C:C0:9F:7A:CF:75:12:D0:96:1D:AC:D5:F3:FF:58:95:B8:C1:83
sha1值获取:找到系统默认的debug.keystore(C:\Users\Administrator\.android\debug.keystore)
在cmd窗口或android studio 中的Terminal中执行命令:
地址
------------------------------------------------------
4、添加jar和so库(不要添加v4包)
so库添加方式:
第一种:使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。
第二种:使用自定义配置,将下载文件的 armeabi 文件夹复制到 libs 目录,如果有这个目录,请将下载的 so 库复制到这个目录,然后打开build.gradle,找到 sourceSets 标签:
sourceSets{
main{
jniLibs.srcDirs = ['libs']
}
}
------------------------------------------------------
5、在AndroidManifest中完成内容配置
根据开发文档完成内容
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="您的Key"/>
--------------------------------------------------------
//地图包、搜索包需要的基础权限
<!--允许程序打开网络套接字-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许程序设置内置sd卡的写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许程序获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许程序访问WiFi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许程序读写手机状态和身份-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
------------------------------------------------------
6、在Activity的xml文件中添加控件
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
------------------------------------------------------
7、在Activity中完成内容展示
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basicmap_activity);//设置对应的XML布局文件
MapView mapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法必须重写
AMap aMap = mapView.getMap();
}
//重写方法
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
------------------------------------------------------
8、设置地图定位蓝点
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
myLocationStyle.anchor((float) 40.1767200000, (float) 116.1650200000);//设置定位蓝点图标的锚点方法。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
//地图蓝点的绘制
LatLng latLng = new LatLng(40.1767200000, 116.1650200000);
final Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("吉利大学"));
------------------------------------------------------------------------
10、地图导航
4种方式:驾车、步行、公交、骑行
准备工作:导入示例工程的overlay、util、res/drawable、values/colors及string资源
以驾车路线规划为例:
------------------------------------------------------
//驾车路线规划
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
// 吉利大学的坐标 40.1767200000,116.1650200000
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9179400000, 116.3971400000));
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, null, null, "");
//使用类 RouteSearch 的 calculateRideRouteAsyn(RideRouteQuery query) 方法进行骑行规划路径计算。
routeSearch.calculateDriveRouteAsyn(query);
//在驾车路线规划的响应内容中:
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
//清除所有地图标识点
aMap.clear();
if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getPaths() != null) {
if (result.getPaths().size() > 0) {
mDriveRouteResult = result;
final DrivePath drivePath = mDriveRouteResult.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
MainActivity.this, aMap, drivePath,
mDriveRouteResult.getStartPos(),
mDriveRouteResult.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
} else if (result != null && result.getPaths() == null) {
ToastUtil.show(MainActivity.this, R.string.no_result);
}
} else {
ToastUtil.show(MainActivity.this, R.string.no_result);
}
} else {
ToastUtil.showerror(this.getApplicationContext(), errorCode);
}
}
------------------------------------------------------
//步行路径规划
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
//初始化query对象,fromAndTo是包含起终点信息,walkMode是步行路径规划的模式
RouteSearch.WalkRouteQuery query = new RouteSearch.WalkRouteQuery(fromAndTo, RouteSearch.WALK_DEFAULT);
routeSearch.calculateWalkRouteAsyn(query);//开始算路
------------------------------------------------------
//公交
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
// fromAndTo包含路径规划的起点和终点,RouteSearch.BusLeaseWalk表示公交查询模式
// 第三个参数表示公交查询城市区号,第四个参数表示是否计算夜班车,0表示不计算,1表示计算
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
RouteSearch.BusRouteQuery query = new RouteSearch.BusRouteQuery(fromAndTo, RouteSearch.BusLeaseWalk, "010", 0);
//query.setCityd("027");//终点城市区号
routeSearch.calculateBusRouteAsyn(query);//开始规划路径
aMap.clear();// 清理地图上的所有覆盖物
//TODO 需要获取对应条目的路径显示以及回显信息
------------------------------------------------------
//骑行路线导航
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(39.9923000000, 116.2683700000));
RouteSearch.RideRouteQuery query = new RouteSearch.RideRouteQuery(fromAndTo, RouteSearch.RIDING_FAST);
routeSearch.calculateRideRouteAsyn(query);
------------------------------------------------------
11、POI查询
//poi(兴趣点)检索
query = new PoiSearch.Query("羊蝎子", "", "北京");
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
query.setPageSize(10);// 设置每页最多返回多少条poiitem
query.setPageNum(0);//设置查询页码
PoiSearch poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();
============================================================================
public void onPoiSearched(PoiResult result, int rCode) {
if (rCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getQuery() != null) {// 搜索poi的结果
if (result.getQuery().equals(query)) {// 是否是同一条
PoiResult poiResult = result;
// 取得搜索到的poiitems有多少页
List<PoiItem> poiItems = poiResult.getPois();// 取得第一页的poiitem数据,页数从数字0开始
List<SuggestionCity> suggestionCities = poiResult
.getSearchSuggestionCitys();// 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
if (poiItems != null && poiItems.size() > 0) {
aMap.clear();// 清理之前的图标
PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
poiOverlay.removeFromMap();
poiOverlay.addToMap();
poiOverlay.zoomToSpan();
} else {
ToastUtil.show(MainActivity.this,
R.string.no_result);
}
}
} else {
ToastUtil.show(MainActivity.this,
R.string.no_result);
}
} else {
ToastUtil.showerror(this, rCode);
}
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
}
============================================================================
点击按钮
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt:
GeocodeSearch geocodeSearch = new GeocodeSearch(this);
geocodeSearch.setOnGeocodeSearchListener(this);
GeocodeQuery query = new GeocodeQuery(zh.getText().toString(), "010");
geocodeSearch.getFromLocationNameAsyn(query);
break;
}
}
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
}
@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
GeocodeAddress geocodeAddress = geocodeResult.getGeocodeAddressList().get(0);
double latitude = geocodeAddress.getLatLonPoint().getLatitude();
double longitude = geocodeAddress.getLatLonPoint().getLongitude();
Log.d("MainActivity", "经纬度为:" + latitude + "..." + longitude);
initDrivingRouteSearch(latitude,longitude);
}
private void initDrivingRouteSearch(double latitude, double longitude) {
//驾车路线规划
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
// 吉利大学的坐标 40.1767200000,116.1650200000
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(40.1767200000, 116.1650200000), new LatLonPoint(latitude, longitude));
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, null, null, "");
//使用类 RouteSearch 的 calculateRideRouteAsyn(RideRouteQuery query) 方法进行骑行规划路径计算。
routeSearch.calculateDriveRouteAsyn(query);
}