第一步:
1、创建新应用
进入控制台,创建一个新应用。如果您之前已经创建过应用,可直接跳过这个步骤。
2、添加新Key
在DOS命令窗口输入下面命令即可
C:\Users\WIN7\.android>keytool -list -v -keystore debug.keystore
输入密钥库口令:
***************** WARNING WARNING WARNING *****************
* 存储在您的密钥库中的信息的完整性 *
* 尚未经过验证! 为了验证其完整性, *
* 必须提供密钥库口令。 *
***************** WARNING WARNING WARNING *****************
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: androiddebugkey
创建日期: 2018-4-19
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: 4b188cff
有效期开始日期: Thu Apr 19 09:23:28 CST 2018, 截止日期: Sat Apr 11 09:23:28 CST 2048
证书指纹:
MD5: 4C:B5:90:BB:91:7F:8A:4A:59:75:2F:7D:DD:03:11:C3
第3步 在Android 清单配置文件中AndroidManifest.xml中
获取包名。
在创建的应用上点击"添加新Key"按钮,在弹出的对话框中,依次输入应用名名称,选择绑定的服务为“Android平台SDK”,输入发布版安全码 SHA1、调试版安全码 SHA1、以及 Package,如下图所示:
需要注意的是: 1个KEY只能用于一个应用(多渠道安装包属于多个应用),1个Key在多个应用上使用会出现服务调用失败。
在阅读完高德地图API服务条款后,勾选此选项,点击“提交”,完成 Key 的申请,此时您可以在所创建的应用下面看到刚申请的 Key 了。
第 4 步 把key添加到清单配置文件AndroidManifest.xml中:
添加到application和activity并列
//开发者申请的key
第 5 步 :在清单配置文件AndroidManifest.xml中添加所需权限
第6步:添加 jar 文件:
将下载的地图 SDK 的 jar包复制到工程(此处截图以官方示例Demo为例子)的 libs 目录下,如果有老版本 jar 包在其中,请删除。如图所示:
别忘记把jar包导入到项目中
第7步 :在app 下build.gradle 添加sourceSets
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
第8步:把将下载谷歌的地图Demo中的res文件覆盖到项目中的res文件夹注意values文件夹不要覆盖,将文件打开,将里面的内容代码一个一个粘进去
如图所示:
第9步:把下载谷歌的地图Demo中的overlay文件和util文件2个类添加到项目中
注意:复制下面的4个类 R文件包不要导错 ,不对的导包文件直接删除即可
第10步:在xml布局文件中添加
首先在布局xml文件中添加地图控件:
XML
第11步:在Activity中添加声明周期的方法
在项目中使用地图的时候需要注意,需要合理的管理地图生命周期,这非常的重要。将下列声明周期的方法复制到Acitivity中
Java
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@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);
}
第12步: 绘制地图蓝点
public class MainActivity extends AppCompatActivity {
private MainActivity mContext;
private MapView mMapView;
private AMap aMap;
private TextView start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mContext = MainActivity.this;
mMapView.onCreate(savedInstanceState);
// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
if (aMap == null) {
aMap = mMapView.getMap();
}
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
myLocationStyle.showMyLocation(true);
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
getPositioning();
}
}
实现效果如图所示:
第13步 :定位当前位置:
public class MainActivity extends AppCompatActivity {
private MainActivity mContext;
private MapView mMapView;
private AMap aMap;
private TextView start;
public AMapLocationClient mLocationClient = null;
//声明定位回调监听器
public AMapLocationListener mLocationListener = new MyAMapLocationListener();
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
// 定位当前位置的方法 在哪个需要在哪调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
mContext = MainActivity.this;
mMapView.onCreate(savedInstanceState);
// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
if (aMap == null) {
aMap = mMapView.getMap();
}
//定位当前位置的方法哪里需要在哪里调用
getPositioning();
}
public void getPositioning() {
//初始化定位
mLocationClient = new AMapLocationClient(this);
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
//获取一次定位结果:
//该方法默认为false。
mLocationOption.setOnceLocation(true);
//获取最近3s内精度最高的一次定位结果:
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
mLocationOption.setOnceLocationLatest(true);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否允许模拟位置,默认为true,允许模拟位置
mLocationOption.setMockEnable(true);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//启动定位
mLocationClient.startLocation();
}
class MyAMapLocationListener implements AMapLocationListener {
@Override
public void onLocationChanged(final AMapLocation aMapLocation) {
double latitude = aMapLocation.getLatitude();//获取纬度
double longitude = aMapLocation.getLongitude();//获取经度
String aoiName = aMapLocation.getAoiName();
String aoiName2 = aMapLocation.getPoiName();获取当前所在地址
String address = aMapLocation.getCity();获取的当前所在城市
start.setText(address);//设置当前城市的位置到UI
}
}
private void initView() {
mMapView = (MapView) findViewById(R.id.mapView);
start = (TextView) findViewById(R.id.start);
}
}
第14步:路线规划
首先设置起点位置→然后设置终点位置→最后规划路线;
我把这3个步骤写成方法了 调用的时候注意就可以了
首先设置起点:起点方法
//设置起点的方法
private GeocodeSearch geocoderSearch;
private LatLonPoint latLonPoint;
private void qidian() {
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
}
@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
latLonPoint = geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();
zhongdian();
}
});
//起点默认设置为鹤壁 也可以自己定义位置
GeocodeQuery query = new GeocodeQuery("鹤壁", "");
geocoderSearch.getFromLocationNameAsyn(query);
}
其次:终点的方法:
设置终点的方法
private LatLonPoint latLonPoint1;
private void zhongdian() {
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(new
GeocodeSearch.OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
}
@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
latLonPoint1 =
geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();
调用路线规划
luxian();
}
});
GeocodeQuery query = new GeocodeQuery("河北", "");
geocoderSearch.getFromLocationNameAsyn(query);
}
最后:路线规划的方法
private RouteSearch routeSearch;
// 路线规划的方法
private void luxian() {
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(new RouteSearch.OnRouteSearchListener() {
@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
}
@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) {
final DrivePath drivePath = result.getPaths()
.get(0);
if (drivePath == null) {
return;
}
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
mContext, aMap, drivePath,
result.getStartPos(),
result.getTargetPos(), null);
drivingRouteOverlay.setNodeIconVisibility(false);
drivingRouteOverlay.setIsColorfulline(true);
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
} else if (result != null && result.getPaths() == null) {
ToastUtil.show(mContext, R.string.no_result);
}
} else {
ToastUtil.show(mContext, R.string.no_result);
}
} else {
ToastUtil.showerror(MainActivity.this, errorCode);
}
}
@Override
public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
}
@Override
public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
}
});
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(latLonPoint, latLonPoint1);
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, 0, null, null, "");
routeSearch.calculateDriveRouteAsyn(query);
}
效果图如图所示:
通过以上配置就算完成了 高德地图的 蓝点, 定位 , 和 路线规划!
如有问题 请和我留言