2024年Android项目实现高德导航
使用高德SDK实现导航功能
这是今天企业实训的一个小作业,实际上我从昨天就开始尝试申请key然后下载官方Demo开始实验。本来是要做flutter项目,但是高德官方里flutter教程只有显示地图和定位功能,没有导航功能,导航功能官方只有Android的教程。今天也是用Android原生进行编写的。至于怎么整合到flutter项目里目前还不知道。。。
1. 官网下载SDK
我也尝试过直接gradle引入包的操作,但是直接引入的会缺少AmapNaviParams
。官网也一直强调有个什么东西开源了所以提供的包里移除了一些东西(不知道到底是什么)。
我下载的是导航合包:
2. 创建项目
直接Android Studio创建一个java,Groovy的项目即可。
设置里需要设置生成所有Gradle Task:
这样你就可以靠点击这里直接获得你项目的SHA1的值,申请key的时候需要这个。
点击上图位置你就可以在终端看见你的SHA1值。在我这里release和debug的SHA1的值是一样的。
3. 导入你下载的SDK
在app的build.gradle
的dependencies
里添加一行implementation fileTree(dir: 'libs', include: ['*.jar'])
在上方和compileOptions
同级的位置添加:
1 | sourceSets { |
如图:
同时下载的SDK如图放在app文件夹下的libs文件夹下。
同步一下即导入完成。
添加权限和你的KEY
这里需要在manifest文件里添加一些权限,你的key和一个服务。
1 | <!--允许访问网络,必选权限--> |
然后application下添加你的key和一个服务,之后还要用到一个高德自己的activity,这里顺便一起声明了,这些和你的启动Activity是同级的:
1 | <meta-data android:name="com.amap.api.v2.apikey" android:value="你的key"> |
继续之前
首先你的key应该按照官网已经申请成功了,这里我把我的项目传到github上。如果想要源码请直接跳转下载。
展示图
相对于参考博客做的代码替换
由于有一些APi在最新的SDK中已经失效,这里重点写一下相对于参考博客代码中的不同:
MainActivity中:1
2
3
4
5
6
7
8
9private void configureMap() {
if (aMap == null) return;
MyLocationStyle myLocationStyle;
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
}
这个函数中的MyLocationStyle需要进行替换。
由于参考博客中并没有完整的代码,你需要在MainActivity中添加:1
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
作为这个code的声明和初始化。
我在实际编写的时候,Android Studio不能自动import关于manifest的库,会导致申请权限的代码中爆红一片。你需要引用:
1 | import android.Manifest; |
其他应该没有什么变化。
MainActivity
这是这个project中的核心文件,其中按钮绑定的跳转函数那里是重点:
1 | findViewById(R.id.btnGotoNavi).setOnClickListener(new View.OnClickListener() { |
这里直接跳转到高德包里的一个activity中,可以进行导航等行为,这个是调用AmapRouteActivity
,之前已在manifest中声明。当然也可以进行有起终点启动导航。官网文档
1 | //起点 |
记录开发环境和调试手机
1 | Android Studio Jellyfish | 2023.3.1 Patch 1 |
手机是vivo iqoo,android11。