高德地图定位不准确?原因在这里!

 
高德地图的集成还是比较简单的,而且用法都有Demo,下面我就说一说定位不准确的原因吧

1.获取SHA1值出错,这个很重要,如果SHA1值不对的话,高德SDK是不会告诉你的,而且最可恶的是还能运行,位置就会不准确甚至偏差很大。
因为你获取的sha1值可能是默认的debug.keystore,而高德要求的是你打包签名后的自定义的SHA1值(JKS文件),如何查看keystore文件路径:AndroidStudio-->Build-->Generate Signed APK-->
Key Stroe path就是签名打包后的路径,用它才行。也就是说,你的应用先签名打包,然后才能获取相匹配的SHA1值,进而获取准确的位置。

获取SHA1值

首先,绝大多数App在调试时使用的签名文件(debug keystore)和最终App发布使用的签名文件(自定义的keystore)是不同的,不同签名文件的SHA1值也是不同的。下面提供几种获取SHA1值的方式:


通过Android Studio编译器获取SHA1

第一步、打开Android StudioTerminal工具

第二步、输入命令:keytool -v -list -keystore keystore文件路径(AndroidStudio-->Build-->Generate Signed APK-->Key Stroe path就是签名打包后的路径)

第三步、输入Keystore密码

SHA1 fingerprint



使用 keytooljdk自带工具)获取SHA1,按照如下步骤进行操作

1.运行进入控制台。开始-搜索里面输入cmd按回车

2.在弹出的控制台窗口中输入 cd .android 定位到

3.继续在控制台输入命令。

debug.keystore(默认):命令为:keytool -list -v -keystore debug.keystore

自定义的 keystore:命令为:keytool -list -v -keystore apkkeystore(AndroidStudio-->Build-->Generate Signed APK-->Key Stroe path就是签名打包后的路径)

如下所示:
继续在控制台输入命令

提示输入密钥库密码,编译器提供的debug keystore默认密码是 android,自定义签名文件的密码请自行填写。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取 SHA1 值,如下图所示:
Sha1 值

说明:keystore 文件为 Android 签名证书文件。

2.第二种原因:未开启高精度模式
在开始定位的方法里开启高精度模式
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

2.第二种原因:导包错误,忘记添加依赖

ok之后,到官网下载高德SDK(http://lbs.amap.com/api/android-sdk/download/), 我这边全部都下载了,解压后,得到一个 AMap3DMap_xxxxx(版本号).jar 文件和一个 armeabi 文件夹,之后,
()jar包拷贝到你项目的libs目录下.
()main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可.

Studio 配置工程
别忘了添加File依赖:

3.第三种原因:忘记申请权限或权限不全,参照demo把权限全都加上就可以了
<!--允许程序打开网络套接字-->
<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"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

最后别忘了在清单文件中配置key:

  <meta-data android:name="com.amap.api.v2.apikey"
  android:value="您申请的Key"></meta-data>

最后祝写代码愉快!

                
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值