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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34379015/article/details/77710655

前一段时间,我做了一个关于地图的应用,调试的时候一切正常,签名后就无法正常定位。刚开始以为是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;
}

猜你喜欢

转载自blog.csdn.net/qq_34379015/article/details/77710655