前言:
在成功实现调用高德地图api的过程中我真的是遇到了很多的问题,感觉简直是把能遇到的各种问题都遇到了,比如同时导入了jar包和.so文件在运行时发现两者之间可能有冲突,或解决了该冲突之后,成功运行,但地图并不显示,显示为白屏等,在这个期间我做了很多的尝试,比如调整了targetSdk、Gradle的版本,按照其他资料注释了setting.gradle里面的部分内容,添加android:hardwareAccelerated="true"该句进行硬件加速等但都没有解决这个问题。
为了解决这个问题,我将所有流程重新又进行了一遍,最终发现我这边的白屏可能是由两个问题导致的:在进行地图SDK下载时我选择了前者,可能和我的版本不太符合,之后改选了地图SDK旧版下载后没有出现文件冲突的问题,我想可能旧版的比较稳定吧;其次是我一开始建jniLibs时将它和libs同级了,正确的应该是建在src/main/下面。下面我把我运行成功的步骤分享一下,希望可以帮助到有需要的友友们~(下面需要的包可在资源中进行下载)
一.搜索高德开放平台,进行注册并登录,进入到自己的控制台,打开应用管理下的我的应用,点击创建新应用。
1.关于获取发布版安全码SHA1的过程如下:
打开Android Studio下方的Terminal,并自行找到.android在电脑中的位置,找到了之后,按照下图所示:
之后执行 keytool -list -v -keystore 签名文件的位置(即.keystore的位置),如下图所示:
若出现这个问题,则需要找到JDK的安装路径的bin子目录(里面有keytool.exe工具),这里若出现找不到该命令的提示,则说明还未在PATH环境变量中增加%JAVA_HOME%/bin路径。找到之后如下图所示:
默认口令为android,输入正确后,即可获得SHA1安全码,如下图所示:
2.关于包名如何获得?
填入后点击提交,即可获得key,后续会使用,如下图所示:
二.下载Android 地图SDK并设置相关权限。
下载后进行解压,会得到如图所示:
之后将最后面的那个jar包放到工程libs里面,并右键点击Add As Library... 将该jar包加载到build.gradle中,之后在src/main下面建jniLibs子目录,将上图前五个文件复制进去,就会得到如下图所示:
之后在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" />
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
同时在该文件application中添加如下代码:
<meta-data android:name="com.amap.api.v2.apikey" android:value="前面获取到的key值">
</meta-data>
设置好这些权限之后就来到了显示地图的部分。
三.显示地图。
设置布局文件,代码如下所示:
<com.amap.api.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.amap.api.maps.MapView>
java中调用关键代码如下所示:
private AMap aMap;
MapView mMapView = null;
//获取地图控件引用
mMapView = (MapView)findViewById(R.id.mapView);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
//初始化地图控制器对象
if (aMap == null) {
aMap = mMapView.getMap();
}
@Override
public void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}
通过以上操作之后,点击运行,地图就可以显示出来了,如下图所示。
以上便是我成功的一次操作,希望可以帮助到大家,喜欢的可以点赞收藏噢~