最近项目用到了附近位置搜索功能,以及定位功能,我就去申请了 高德地图sdk 踩了很对坑,记录下,方便下次用;
一.申请账号 创建应用 获取key
如果你还没有申请 高德开放平台账号,那么就需要你去申请一个;申请完后,
1、点击创建新应用,去创建应用:
输入应用名称,选择应用类型,创建应用:
如图这就是我创建的应用:
2、点击 添加新key 创建key:
此时要注意了,一定要一步步的获取所对应的值: 输入Key名称,选择绑定的服务(此处为“Android平台”),输入发布版安全码 SHA1、调试版安全码 SHA1、以及 PackageName ;
3、获取发布版安全码SHA1:
第一种方式:
1.打开Android Studio的Terminal工具(在AndroidStudio下方)
2.输入命令:keytool -v -list -keystore 你应用的keystore文件名称
3.输入Keystore密码
第二种方式:
1.打开 你应用的keystore文件 所在的文件夹,在此文件夹下打开命令行窗口
2. 输入命令:keytool -v -list -keystore 你应用的keystore文件名称
3.会提示(输入密钥库口令): 输入Keystore密码
如图:
把对应的SHA1输入到 发布版安全码 SHA1 中,注意:区分大小写,不能有空格;
4、获取调试版安全码SHA1:
1.在用户文件夹下找到.android文件夹,找到debug.keystore文件,在.android此文件夹下打开命令行窗口
2. 输入命令:keytool -v -list -keystore debug.keystore
3.会提示(输入密钥库口令): 直接点击 Enter就可以
将SHA1输入到 调试版安全码 SHA1;
在清单文件获取包名 :
注意:
1、Key注册时填写的包名应该与AndroidManifest.xml配置文件的package属性内容相一致,如不一致请调整。
2、Android Studio开发者请注意调整build.gradle文件的applicationid与package一致,如不一致将会导致鉴权失败。
3、请注意检查包名的大小写是否统一。
提交成功后就可以了;
二,获取sdk,配置项目代码
1、获取SDK:到官网下载高德SDK 下载地址
注意:这里你可以选择 Android定位SDK 一键下载, 也可以根据项目需求选择下载,因为我的项目中用到定位和搜索功能,我选择了这两个(这样可以大大减小包的体积),建议根据项目需求选择下载 如图:
2、将 下载的地图 SDK 的 jar包复制到工程的 libs 目录下
如果你选择了3D地图,会有SO库, 在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下;
3、在清单文件里配置 对应的权限,服务和key值
配置权限
<!--允许程序打开网络套接字-->
<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"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
如果你的项目中需要定位功能,需要配置服务:
<!-- 定位需要的服务 -->
<service android:name="com.amap.api.location.APSService"/>
配置key
<!--高德地图key-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你申请的key值"/>
注意:这儿的name 值 就是 com.amap.api.v2.apikey 不是你设置的keyn名称值(ps:我以为是我设置的key名称,一直报key不存在错误,好久才解决,一个大坑)
这样配置就好了,你可以去用了;
配置好后,你可以验证下你的SHA1是不是正确:
程序中添加以下代码段获取当前APK使用的签明文件SHA1
public static String sHA1(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
byte[] cert = info.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] publicKey = md.digest(cert);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < publicKey.length; i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i])
.toUpperCase(Locale.US);
if (appendString.length() == 1)
hexString.append("0");
hexString.append(appendString);
hexString.append(":");
}
String result = hexString.toString();
return result.substring(0, result.length()-1);
} catch (NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
此代码获取的SHA1值是否与你所配置的SHA1值匹配(debug或者release至少有一个与代码获取的SHA1一致),请注意不能带有空格,SHA1严格校验大小写;
如果你在 使用中 报 返回INVALID_USER_SCODE 或者错误码: 7(KEY鉴权失败) 32(Key鉴权验证失败) 1002(用户Key不正确或过期),就去看下
1.在AndroidManifest.xml的application标签中配置Key是否正确;
2.申请key时SHA1是否获取正确;
好了,高德地图集成完成了,可以去使用了;