您的位置:首页 > 移动开发 > Android开发

Android 解决高德地图签名后无法定位的问题

2017-08-30 10:46 1096 查看
前一段时间,我做了一个关于地图的应用,调试的时候一切正常,签名后就无法正常定位。刚开始以为是6.0动态权限问题改变的原因,应用的调试版本和签名后的版本SHA1值是不同的,而在平台上只用了调试版本的SHA1,所以导致签名的应用版本无法正常使用。

那怎么修改呢?

首先我们看一下高德开发平台上的应用配置中的Key



这里是可以填两个SHA1值的,为了保证调试和签名版本都能正常运行,第一个可以填写签名版本的SHA1值,第二个还是填写调试版本的SHA1
会遇见这个问题的人,估计调试版本的SHA1都知道了,但是可能不知道怎么获取签名版本后的SHA1
按照平台提供的方法可以通过下面这个函数进行Log打印,打印后再将这个值设置上去,应用就能正常使用了。


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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐