高德地图路线导航制作
转载请注明出处:https://blog.csdn.net/Dreamer_man/article/details/104193832
由于公司项目需求,特地去官网,重新温习了一遍高德的地图制作。并且自己写了个Demo,主要包含5大功能:地图、定位、自定义marker、路线制定、模拟导航。下面是效果图(代码下载链接在最下面,有需要的拿走):
1. 准备工作:
首先需要做一些地图的准备工作,这就好比写代码前,要洗手通风一样。
1.1 获取Key
第一步,去高德官网申请key,具体申请方式,获取key已经讲的很清楚了,这里我就不细细道来了。
图1-1 申请Key
1.2 添加SDK
第二步,添加SDK。这里有两种添加方式,第一种是通过拷贝添加SDK,第二种是通过Gradle集成SDK。这里我选择的是第二种,当然也建议大家用第二种,为什么呢?因为懒,哈哈,当然具体需要集成什么SDK,根据大家业务需求写。如果小伙伴们对第一种也感兴趣,可以参考添加SDK。
//3D地图so及jar和导航
implementation 'com.amap.api:navi-3dmap:latest.integration'
//定位功能
implementation 'com.amap.api:location:latest.integration'
//搜索功能
implementation 'com.amap.api:search:latest.integration'
注意(此乃官方吐槽):
1. navi导航SDK 5.0.0以后版本包含了3D地图SDK,所以请不要同时引入 map3d 和 navi SDK。
2. 依照上述方法引入 SDK 以后,不需要在libs文件夹下导入对应SDK的 so 和 jar 包,会有冲突。
第2点说人话就是,如果在gradle中添加了上面几个依赖后,就不需要添加其他地图so库和jar包(手动滑稽,是不是很方便)
1.3 配置AndroidManifest.xml
第三步,配置AndroidManifest.xml
首先,声明权限
<!--地图包、搜索包需要的基础权限-->
<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" />
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
然后,设置高德key
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="开发者申请的key"/>
最后,添加定位服务(这点很重要,没有这个服务,应用无法定位)
<service android:name="com.amap.api.location.APSService"></service>
完事具备,只欠东风,咱们就开始垒代码。
2. 地图显示
第一步,在XML文件中定义MapView控件
<com.amap.api.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:la