使用高德SDK实现导航功能 参考博客
Github仓库直达
这是今天企业实训的一个小作业,实际上我从昨天就开始尝试申请key然后下载官方Demo开始实验。本来是要做flutter项目,但是高德官方里flutter教程只有显示地图和定位功能,没有导航功能,导航功能官方只有Android的教程。今天也是用Android原生进行编写的。至于怎么整合到flutter项目里目前还不知道。。。
1. 官网下载SDK 我也尝试过直接gradle引入包的操作,但是直接引入的会缺少AmapNaviParams
。官网也一直强调有个什么东西开源了所以提供的包里移除了一些东西(不知道到底是什么)。
官网SDK下载地址
我下载的是导航合包:
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 2 3 4 5 sourceSets { main { jniLibs.srcDirs = ['libs'] } }
如图:
同时下载的SDK如图放在app文件夹下的libs文件夹下。
同步一下即导入完成。
添加权限和你的KEY 这里需要在manifest文件里添加一些权限,你的key和一个服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 <uses-permission android:name ="android.permission.INTERNET" /> <uses-permission android:name ="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name ="android.permission.READ_PHONE_STATE" /> <uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name ="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name ="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name ="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name ="android.permission.INTERNET" /> <uses-permission android:name ="android.permission.READ_PHONE_STATE" /> <uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name ="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name ="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name ="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name ="android.permission.ACCESS_COARSE_LOCATION" />
然后application下添加你的key和一个服务,之后还要用到一个高德自己的activity,这里顺便一起声明了,这些和你的启动Activity是同级的:
1 2 3 4 5 6 7 <meta-data android:name ="com.amap.api.v2.apikey" android:value ="你的key" > </meta-data > <service android:name ="com.amap.api.location.APSService" > </service > <activity android:name ="com.amap.api.navi.AmapRouteActivity" android:theme ="@android:style/Theme.NoTitleBar" android:configChanges ="orientation|keyboardHidden|screenSize|navigation" />
继续之前 首先你的key应该按照官网已经申请成功了,这里我把我的项目传到github上。如果想要源码请直接跳转下载。
我的仓库
展示图
相对于参考博客做的代码替换 由于有一些APi在最新的SDK中已经失效,这里重点写一下相对于参考博客代码中的不同:
MainActivity中:
1 2 3 4 5 6 7 8 9 private void configureMap () { if (aMap == null ) return ; MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle (); myLocationStyle.interval(2000 ); aMap.setMyLocationStyle(myLocationStyle); aMap.setMyLocationEnabled(true ); }
这个函数中的MyLocationStyle需要进行替换。
由于参考博客中并没有完整的代码,你需要在MainActivity中添加:
1 private static final int LOCATION_PERMISSION_REQUEST_CODE = 1 ;
作为这个code的声明和初始化。
我在实际编写的时候,Android Studio不能自动import关于manifest的库,会导致申请权限的代码中爆红一片。你需要引用:
1 import android.Manifest;
其他应该没有什么变化。
MainActivity 这是这个project中的核心文件,其中按钮绑定的跳转函数那里是重点:
1 2 3 4 5 6 7 8 findViewById(R.id.btnGotoNavi).setOnClickListener(new View .OnClickListener() { @Override public void onClick (View v) { AmapNaviParams params = new AmapNaviParams (null , null , null , AmapNaviType.DRIVER, AmapPageType.ROUTE); AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, null ); } });
这里直接跳转到高德包里的一个activity中,可以进行导航等行为,这个是调用AmapRouteActivity
,之前已在manifest中声明。当然也可以进行有起终点启动导航。官网文档
1 2 3 4 5 6 7 8 9 10 11 12 Poi start = new Poi ("北京首都机场" , new LatLng (40.080525 ,116.603039 ), "B000A28DAE" );List<Poi> poiList = new ArrayList (); poiList.add(new Poi ("故宫" , new LatLng (39.918058 ,116.397026 ), "B000A8UIN8" )); Poi end = new Poi ("北京大学" , new LatLng (39.941823 ,116.426319 ), "B000A816R6" );AmapNaviParams params = new AmapNaviParams (start, poiList, end, AmapNaviType.DRIVER, AmapPageType.ROUTE); AmapNaviPage.getInstance().showRouteActivity(getApplicationContext(), params, null );
记录开发环境和调试手机 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Android Studio Jellyfish | 2023.3.1 Patch 1 Build #AI-233.14808.21.2331.11842104, built on May 15, 2024 Runtime version: 17.0.10+0-17.0.10b1087.21-11572160 aarch64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. macOS 14.5 GC: G1 Young Generation, G1 Old Generation Memory: 2048M Cores: 8 Metal Rendering is ON Registry: ide.experimental.ui=true Non-Bundled Plugins: Dart (233.15271) io.flutter (79.0.2)
手机是vivo iqoo,android11。