Android高德地图开发
- 引言:本篇博客将主要描述Android Studio开发高德地图过程的前期,如何搭建好环境以及其中一些棘手的点,至于具体的详细过程,可参见高德官网的详细教程点击这里。好了,接下来就让我们进入到高德地图的开发中吧。
1.环境的搭建(Android Studio)
1.key值获取
在高德地图官网注册好账号之后(这方面不用多说了吧>△<),接下来我们依次进入个人中心
>应用管理
>创建新应用
,此时如下所示:

要成功的申请到所需要的Key值,我们需要去仔细的填写我所标记的这三点内容。那么,如何才能得到呢?
(1)(2)调试版及发布版本的安全码SHA1:
在我们的android studio中,打开我们的项目,将其进行打包,此时需要注意的地方:要将其打包两次,分别新建debug.jks,选择Debug版本进行打包,以及新建release.jks,同时选择Release版本进行打包,最终会生成两个.jks文件
,然后我们就可以查询本项目对应的各自版本的SHA1值了。

在这里建议将其打包在项目路径下,方便后边进行查找。下边是打包好之后所生成的两个.jks文件。

接下来我们利用一条命令去查询一下本项目对应的发布版SHA1值以及调试版SHA1值,命令如下所示(要在对应的key.jks所在路径下执行查询的相关命令):
keytool -list -v -keystore debug.jks
(查询debug版)以及keytool -list -v -keystore release.jks
(查询release版)
(3)包名
这里的包名不可以乱填,必须是
项目路径下所创建的,需要用到地图相关功能的包
的包名。打开 Android 项目的 AndroidManifest.xml 配置文件,package 属性所对应的内容为应用包名,也请检查 build.gradle 文件的 applicationid 属性是否与上文提到的 package 属性一致,如果不一致会导致INVALID_USER_SCODE,请调整一致。
到了这里,就可以成功的拿到项目对应的key值了。
2.导包及添加.so文件
拿到key值后,我们就开始进入到资源的准备工作。首先是导入地图相关的包,放入libs目录下。

接着就是添加.so文件,在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。如图所示:

此时有一个需要着重注意的地方,就是
我们得保证在jniLibs下的每种版本,其内部对应的.so文件数量和种类必须是一样的
,不然的话,会报错找不到资源。
3.配置所需权限以及key、服务相关
在完成了上述的操作之后,接下来就是配置一些地图相关的东西了。
首先是地图所需要的相关权限,如下所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21//地图包及导航包所需要的权限
<!--允许程序打开网络套接字-->
<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" />
<!--允许程序改变WIFI的网络连接状态>
<uses-permission android:name="android.permission.CHANGE_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"/>
<!--允许程序修改当前设置,如本地化-->
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
<!--允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
相关的服务(为了保证导航功能的正确使用,需在 AndroidManifest.xml 中配置定位 service 组件。)
<!-- 地图相关的文件 -->
//key赋值相关
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="这里输入在第一步时获取到的key值" />
//导航服务相关
<service android:name="com.amap.api.location.APSService" />
接下来要说的一点非常的重要,我在当时配置完成上述操作后,因为这个花费了一下午的时间,那就是当我们生成了两个.jks文件后(debug.jks及release.jks),一定要在项目的build.gradle中将我们所生成的debug.jks进行引用,否则会报key值无效的错误,导致地图无法正常显示。
配置如下:
android {
//在这里进行配置
signingConfigs {
config{
//debug生成key时定义的(默认是key0)
keyAlias 'key0'
//定义时设置的密码
keyPassword 'xxxxxxx'
storeFile file('这里要写dubug.jks所在的全路径(../../debug.jks)')
//定义是设置的密码
storePassword 'xxxxxx'
}
}
compileSdkVersion 26
defaultConfig {
applicationId "shaoqi.gaodedemo"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
//添加对Debug的引用
debug {
//设置引用
signingConfig signingConfigs.config
}
}
}
到了这里,我们的配置工作就告一段落了。接下来就让高德地图显示在我们的页面里边!
2.代码相关
1.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
//地图组件
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
2.代码
public class MainActivity extends Activity {
MapView mMapView = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.map);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
}
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
}
现在,就一起来看看最终实现的效果:

好了,对于高德地图,就先总结到这里,后边会进行地图定位及导航方面的一些定制功能开发。