跟着大佬的博客做高德地图:Android 高德地图API(新版)-优快云博客,结果踩坑了,报错信息如下:
上面写着:请在高德开放平台官网中搜索”INVALID. USER_ SCODE "相关内容进行解诀,然后我就去看了,INVALID. USER_ SCODE信息如下图:看完我就专门去检查了一遍,发现发布版安全码SHA1和调试版安全码SHA1完全对的上,没有空格,也没有任何错误。然后我又去检查权限有没有给,检查完后发现也没问题。
在我的不懈努力下,找来一个大佬帮忙,然后发现可能是jdk的问题,我的是jdk17。上文大佬提及的调试版安全码SHA1是在c盘目录下用这个命令获取的:
keytool -list -v -keystore debug.keystore
我之前的也是在这里获取的,但是运行出来的,依然无法获取定位信息。在另一个大佬的指导下,说出了这种情况:可能因为jdk版本的问题,应该不是在c盘那个.android目录下获取了,可能是由jks文件来获取这个调试版安全码。结果成功了,如图所示:
解决方法:
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 (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
通过此代码把日志获取到的SHA1值写在调试版安全码SHA1即可。