一、搜索高德开放平台,进行注册、登录和认证,进入到自己的控制台,打开应用管理下的我的应用,点击创建新应用
高德地图开放平台的访问地址:https://lbs.amap.com/
第一步 注册开发者用户
直接在页面上注册就好了,使用手机号,个人开发者认证的话需要支付宝扫码认证。
第二步 创建应用
登录控制台以后,选择右上角的应用—>我的应用—>创建新的应用
输入应用名称—>然后选择应用类型(填写的内容与你使用地图服务是没有影响和关系的)
第三步 创建Key
- 在我的应用页面点击“添加”,如下图
- 如何让获取“发布版安全码SHA1”:
直接点击“如何获取”或跳到:常见问题 | 高德地图API (amap.com)
注1:(Terminal工具和cmd类似)如何打开Android Studio的Terminal工具(【Alt+F12快捷键】选项卡—>Help—>Find Action...【Ctrl+Shift+A快捷键】—>Terminal),建议使用 keytool(jdk自带工具)获取SHA1。
注2:若配置了jdk的环境变量,则不需要再进入java的bin目录,debug.ketstore的路径如下图的“位置”
注3:密钥库的口令/密码一般为:android - 如何让获取“PackageName”:
src/main/java下的包名,或是可以打开 Android 应用工程的“AndroidManifest.xml”配置文件,package属性所对应的内容为应用包名。或是如下图
二、下载Android 地图SDK并设置相关权限及地图显示
- 下载Android地图SDK(JAR包的形式)
- 在libs目录下引入JAR包和armeabi文件夹
首先将解压出来的jar包和armeabi文件夹拷贝到project目录下的libs中,并将jar包引入项目中(选中jar包,右键-选择 Add As Library,导入到工程中) - 在build.gradle中添加以下代码(其中 > 代表下一级)
android > defaultConfig > ndk { abiFilters 'armeabi' }
android > sourceSets { main { jniLibs.srcDirs = ['libs'] } }
- 在AndroidManifest.xml文件清单的application中添加如下代码
<meta-data android:name="com.amap.api.v2.apikey" android:value="请输入您应用的Key"/>
- 在AndroidManifest.xml文件清单申明权限(其中前6个为基础)
注意:若使用第7项,则需要先使用第6项<!--地图需要的权限--> <!--允许访问网络,必选权限--> <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"/>
- 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" android:layout_width="match_parent" android:layout_height="match_parent"> </com.amap.api.maps.MapView> </LinearLayout>
- MainActivity.java代码
public class MainActivity extends AppCompatActivity { // private Context context = getApplicationContext(); private Context context = this; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MapsInitializer.updatePrivacyShow(context,true,true); MapsInitializer.updatePrivacyAgree(context,true); MapView mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState); } }
- 此时运行即可出现高德地图
三、总结
我一开始下载的是 Android地图SDK(AAR包的形式),但是拷贝AAR包到libs目录下,然后在AndroidManifest.xml文件清单引入中通过flatDir{dirs 'libs'}引入libs下的文件时,会抛出异常
A problem occurred evaluating project ':app'.
> Build was configured to prefer settings repositories over project repositories but repository 'flatDir' was added by build file 'app\build.gradle'
问题:
对于某些模拟器来说会发生Warning(警告):Device supports x86, but APK only supports armeabi on device Nexus 5XAPI 30
翻译:设备支持x86,但APK仅支持设备Nexus 5XAPI 30上的armeabi(其中“Nexus 5XAPI 30”指模拟器的名字)
解决办法:将2.3中的代码修改为如下
android >
defaultConfig >
ndk {
abiFilters 'arm64-v8a','armeabi','armeabi-v7a','x86','x86_64'
}
android >
sourceSets {
main {
jniLibs.srcDirs = ['libs','src/main/jniLibs']
}
}
注意:除了JAR包的位置不变外,将libs下的armeabi文件夹删除,在src/main/新建jniLibs文件夹,将解压包中的文件夹复制到jniLibs中再通过jniLibs.srcDirs引入
目前 Android 支持的 CPU 架构有有以下几种:
CPU架构 | 描述 |
---|---|
armeabi | 第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢 |
armeabi-v7a | 第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能 |
arm64-v8a | 第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bit |
x86 | intel 32位,一般用于平板 |
x86_64 | intel 64位,一般用于平板 |
mips | 少接触 |
mips64 | 少接触 |
四、显示定位蓝点
只需要在MainActivity.java的onCreate中添加以下代码即可(注意:建议使用真机调试并打“定位服务”)
UiSettings aMapUiSettings = aMap.getUiSettings(); //地图内置UI及手势控制器。
aMapUiSettings.setMyLocationButtonEnabled(true); //设置定位按钮是否可见,
aMap.setMyLocationEnabled(true); //设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
五、获取并显示定位信息
1、AMapLocationClient类
描述:定位服务类。此类提供单次定位、持续定位、最后位置相关功能。
类继承结构:
├── java.lang.Object
└── com.amap.api.location.AMapLocationClient
API地址:AMapLocationClient (aliyun-inc.com)
2、AMapLocationClientOption类
描述:定位参数设置,通过这个类可以对定位的相关参数进行设置。在AMapLocationClient进行定位时需要这些参数
类继承结构:
├── java.lang.Object
└── com.amap.api.location.AMapLocationClientOption
API地址:AMapLocationClientOption (aliyun-inc.com)
3、AMapLocation类
描述:
类继承结构:
├── java.lang.Object
└── Location
└── com.amap.api.location.AMapLocation
API地址:AMapLocation (aliyun-inc.com)
4、