高德地图的集成还是比较简单的,而且用法都有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 Studio的Terminal工具

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

第三步、输入Keystore密码

SHA1 fingerprint



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

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

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

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

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

自定义的 keystore:命令为:keytool -list -v -keystore apk的keystore(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>

最后祝写代码愉快!