注册高德开发平台账号
听说百度地图定位精准、路线规划科学、图层显示清晰,那就选高德地图吧。
注册账号
这一步不用说了吧,我奶奶都会收短信验证码
获取key
在android studio中打开控制台(terminal)
首先进入jre中的bin目录
然后输入keytool -v -list -keystore C:\Users\86132\.android\debug.keystore
(记得更换为你自己的debug.keystore路径,默认在用户文件夹中的.android文件夹下)
\
然后输入密码,默认为android,即可获得如图所示的SHA1码
打开高德开发平台,注册账户后进入我的应用创建应用,点编辑出现如图所示界面
key名称随意
服务平台选择Android平台
发布版安全吗SHA1和调试版安全码SHA1输入刚才终端得到的即可
PackageName就是你的包名
提交后我们即可获得一个key
具体作用好像是用于定位用的,其他我也不太清楚
到这里我们的获取key就完成了
导入高德SDK包
下载
相关下载-Android 地图SDK | 高德地图API (amap.com)
高德官网下载地图SDK,方便起见我们下载这个定制版,这样会整合成一个jar包
下载完成解压后会出现以下文件
配置jar包
然后打开AndroidStudio,新建一个空项目,我这里命名为Gmap 将刚才解压的jar包复制到app\libs,并选择Add as Library
配置so文件
在app\src\main中新建一个jinLibs文件夹,并将armeabi文件夹复制进去
打开app的build.gradle文件,在android标签下加入
sourceSets {
main {
jniLibs.srcDirs = ['libs','src/main/jniLibs']
}
配置权限
然后打开AndroidManifest.xml文件,在manifest标签下加入下述代码
<!--地图需要的权限-->
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许获取设备和运营商信息,用于问题排查和网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--允许获取粗略位置,若用GPS实现定位小蓝点功能则必选。通过WiFi或移动基站获取粗略定位(误差在30~1500米)-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于访问GPS定位。GPS精确定位(精度10米以内)-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--允许写设备缓存,用于问题排查-->
<!-- <uses-permission android:name="android.permission.WRITE_SETTINGS" />-->
<!--允许读设备等信息,用于问题排查-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
在application标签下加入
<meta-data android:name="com.amap.api.v2.apikey"
android:value="你的key">
将你的key值键入
此时SDK已经导入完成了,来个例子测试一下
测试代码
布局文件activity_main.xml如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.amap.api.maps.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
</LinearLayout>
MainActivity.java如下
package com.example.gmap;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMapOptions;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
public class MainActivity extends AppCompatActivity {
private MapView mapView;
private AMap aMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//填充屏幕的UI
mapView = (MapView) findViewById(R.id.map_view);//返回xml中定义的视图或组件的ID
mapView.onCreate(savedInstanceState); //此方法必须重写
init();
}
private void init() {
if (aMap == null) {
aMap = mapView.getMap();
UiSettings mUiSettings = aMap.getUiSettings();
mUiSettings.setCompassEnabled(true);//指南针
mUiSettings.setScaleControlsEnabled(true);//比例尺
mUiSettings.setZoomControlsEnabled(true);//缩放控件
/**
*可通过mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM)调整缩放控件位置
**/
mUiSettings.setAllGesturesEnabled (true);//所有手势的开关
/**
* mUiSettings.setScrollGesturesEnabled(false);滑动
* mUiSettings.setZoomGesturesEnabled(false);缩放
* mUiSettings.setTiltGesturesEnabled(false);倾斜
* mUiSettings.setRotateGesturesEnabled(false);旋转
*/
}
// TODO
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
运行结果如图所示
笔者心路历程总结
万事开头难,我在配置时遇到了各种问题,也查询了各种解决办法,最后总算是让地图显示在我的虚拟机上了
如果你也遇到了类似问题,不妨参考一下
1、提示不存在keytool命令
记得进入jre中的bin目录才可运行,keytool是java独带的命令
2、测试代码中提示各种方法不存在
这个一般是jar包没弄好,记得路径是libs并且一定要add as library
3、测试代码显示无问题也可运行但是白屏,不显示地图
so文件的问题,因为Android Studio一些奇奇怪怪的配置,导致不能直接将so文件和jar包一样放在libs目录,最简便的方法就是我上文提到的,在main里面新建jinLibs目录,将so文件复制进去,然后修改build.gradle文件