浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 定位SDK

开发者在自己的Android移动应用中集成定位SDK,可轻松实现获取当前位置信息的功能。获取当前位置信息,即我们常说的定位。其中位置信息主要包括经纬度、地址、位置描述、周边POI等

常见问题
Android定位SDK问题

1. 百度地图定位SDK是否收费?

目前完全免费开放,百度地图定位SDK已申请了国家专利,因此要遵守百度地图相关使用条款。 具体条款请参见:http://lbsyun.baidu.com/index.php?title=open/law

2. 为何我的程序无法定位成功?

无法定位成功的原因有很多,可收集定位错误返回码,通过返回码查阅具体原因。此外,使用定位SDK时,请注意以下问题:

(1)您需要确保程序编译通过。如果对自己写的代码有疑问,可以参照官方demo开发,或查看标准源代码;

(2)请检查AndroidManifest.xml是否加入了相关PERMISSION和SERVICE声明;

(3)在确认测试手机架构的前提下,检查是否引入了SO文件。目前Android定位SDK已经提供所有架构下的SO文件;

(4)请确保网络通畅,无论是连接Wi-Fi还是使用2G/3G/4G信号;

(5)定位SDK的调用必须在主线程中;

(6)必须在定位SDK启动前设定好参数,例如是否使用GPS,扫描时间间隔设置等。强烈建议开发者设置并保管好自己的prodName,这样方便我们为您提供更好的定位保障服务;

(7)定位SDK start之后立即执行,这种情况下很难定位成功,因为定位SDK刚开始启动还没有获取到定位信息。这时getLocation一般为null。如果是要获取位置成功,可以在listerner中添加一个判断如果strData为空,则再发起一次定位;

(8)定位成功率在99.5%以上。建议打开Wi-Fi,或者尝试走到别的地方,多试几次即可成功定位;

(9) 请使用真机,且插上SIM卡。在虚拟机上无法进行定位测试。

3. 定位回调里BDLocation.getLocType() == 167?

167代表百度服务端无法定位。

解决方案:

1. 请跟新SDK到最新版本;

2. android 6以上系统请检查一下手机定位开关是否打开;

3. 请检查一下应用程序是否开启定位权限;

4. 如您开启GPS权限,请确认是否;

5. 如不满足以上情况,请直接反馈定位时间和测试手机IMEI到loc-bugs@baidu.com(请务必提供如上信息),会有专员负责处理。

备注:

imei获取方式:打开手机拨号键盘,输入*#06# 或 打开百度地图,我的->设置->关于,长按关于,获得cuid。

4. 定位回调里BDLocation.getLocType() == 162?

162代表SO配置出现异常

解决方案:

1. 请检查有无放入定位SDK的SO,或者是否配置正确;

2. 如果需要适配多CPU架构情况,请对应放入各SO文件。

5. 定位回调里BDLocation.getLocType() == 62?

无法获取有效定位依据,定位失败,请检查运营商网络或者WI-FI网络是否正常开启,尝试重新请求定位。

解决办法:

1.检查下网络是不是正常;

2.检查下so文件是不是否引入正确。

3.检查下手机上相关的权限是否开启。

6. 定位SDK中可能出现第一次定位成功,后续均返回505错误?

为了保证定位效率,定位和AK验证是同时进行的,很有可能定位先处理完,所以在AK验证错误的消息还未收到时已经显示定位成功了。此时说明AK的配置肯定是错误的,所以请正确配置AK。

解决方法:

按照官方配置文档,仔细检查AK的配置。

7. 定位位SDK并只使用GPS模式(不联网)定位返回505错误?

说明:定位SDK需要联网进行AK验证,如果使用定位SDK而不使用网络定位(或者不开启网络),仅使用GPS定位的话,使用系统的定位接口即可。如果使用定位SDK,请确保网络可用。

8. 在国外使用定位SDK定位, 返回的时间是国外的时间呢, 还是手机自身时间?

目前SDK网络定位返回的是北京时间,GPS返回的是手机时间。

9. 我定位模式设置的//LocationMode. Device_Sensors:仅使用设备模式;为什么会回调的是网络定位成功呢?

只有首次会回调这个,首次定位需要几十秒到几分钟不等,如果室内没有GPS信号会一直现实缓存的网络定位。

10. 定位经纬度都能拿到, 海拔高度一直获取不到, 返回为什么4.9E-324?

请在初始化的时候配置 mOption.setIsNeedAltitude(false); //可选默认false, 设置定位时是否需要海拔信息, 默认不需要

11. option.setIsNeedLocationPoiList(true); 在获取范围POI时返回的数据较少, 只返回5条, 不能满足需求。

定位中召回的POI都是高权重POI, 非全量, 也不会支持全量POI的召回。

12. 百度地图定位SDK的定位策略是什么?

混合GPS+基站+Wi-Fi定位,百度地图定位SDK会根据环境自动调整定位策略。当然,您也可以通过参数控制,优先使用某种定位模式。

13. 什么是GPS定位、基站定位和Wi-Fi定位?

各种定位模式说明如下:

(1)GPS定位:根据设备GPS芯片和GPS卫星实现定位,GPS定位在室内是不可以使用的。GPS定位精度与芯片以及实际使用环境有关,一般情况下,GPS定位精度在10m左右;

(2)基站定位:根据设备获取的基站信息实现定位,基站定位精度一般不受使用环境影响,主要和基站的覆盖半径有关。百度的基站定位服务精度目前在200m左右;

(3)Wi-Fi定位:根据设备获取的Wi-Fi的信息实现定位,Wi-Fi定位精度一般不受使用环境影响,主要和Wi-Fii半径、Wi-Fi分布密度有关。目前百度的Wi-Fi定位服务精度目前在20m左右;

在户外,先开启GPS再进行定位,结果较准。但GPS比较费电,且在室内不可用。在室内,我们提供了高精度的室内定位能力,定位精度达1-3米。 在返回精确的经纬度信息同时,我们还将当前地点的地址信息、位置描述信息、周边POI信息一并返回,便于广大开发者使用。

定位模式 定位精度 优点 缺点
GPS定位
10m(视运营商基站覆盖范围而定) 定位精度高

不要SIM卡

室内不可用

定位精度与环境有关 费电

基站定位
200m(取决于芯片) 不受环境影响

不需要开启网络

定位精度相对较低

功耗大

Wi-Fi定位
20m 定位精度高

不受环境影响

需要开启Wi-Fi(非连接Wi-Fi)

14. 三种定位模式(高精度模式,低功耗模式,仅用设备模式)的定位策略分别是什么?

定位模式 说明 适用场景
高精度模式定位
同时使用网络定位和GPS定位,优先返回最高精度的定位结果 对定位精度要求较高且无功耗要求的场景
低功耗模式定位
只会使用网络定位(Wi-Fi定位和基站定位),不会使用GPS进行定位 对功耗要求较高的使用场景
设备模式定位
不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位 适用于户外对定位精度较高且强以来GPS模块的定位模式,例如行车、骑行、室外运动记录等

15. 我们公司刚刚搬家,为什么我在新地址定位时仍然定位到上次的位置?

当您的公司搬家时,公司的Wi-Fi设备也会移动位置,Wi-Fi设备被移动后,我们需要在库中调整Wi-Fi的数据,时间一般为一天。您也可以及时在线反馈给我们,帮助我们更快的修正。

16. 为什么android设备当前定位误差有几百或者上千米?

目前Android定位结果有三种,基站定位、Wi-Fi定位和GPS定位。基站定位和Wi-Fi定位统称为网络定位。基站定位的精度在200米左右,Wi-Fi定位精度在20米左右,GPS定位精度在10米。每一种定位方式。 (可见问题6详细解释)

定位模式有高精度定位模式,低功耗定位模式和仅适用设备定位模式。(可见问题7详细解释)

解决方案:

1. 确定您目前采用的定位模式是高精度、低功耗还是设备定位;

确定您的设备是否开启Wi-Fi模块。因基站定位与基站覆盖半径等因素有关,基站定位也会有一定程度的偏差;

2. 开启数据流量和Wi-Fi(定位成功后即可关闭数据流量);

3. GPS定位在室内是不可使用的,确定您当前在室内使用网络定位,在室外可采用GPS定位来提升精度。

17. 如何定位更省电?

为了更省电,可参考一下操作:

(1)开启并获取到位置信息后,就手动stop();

(2)根据需要,选择后台服务和及时扫描。setServiceMode设置服务模式,主要可以设置两种模式:Background(后台服务模式),Immediat(即时扫描服务模式);

Background为后台服务模式,实现策略是后台每隔设定的时间扫描一次定位依据信息,判定位置是否改变,如果改变,生成定位依据加密串。在此模式下,用户可以调用getLocation来根据当前的定位加密串从服务器获取定位依据。也可以实现并注册一个接口LocationChangedListener,当locationChanged的时候,被调用。 Immediat为即时扫描服务模式。在此模式下,后台不扫描。当用户想获取当前位置时,需要实现并注册一个接口ReceiveListener,然后调用startLocating函数,会异步地发起Wi-Fi扫描。当有结果时,定位SDK会调用接口函数;

(3)在大部分机器上,GPS初次定位需要1分钟,有的甚至要两分钟才能定位。初次定位以后,再次定位会快很多。

18. 位置变化时,如何重新定位?

Android定位SDK提供2种定位模式,定时定位和APP主动请求定位;

当setScanSpan < 1000时,为 APP主动请求定位; 当setScanSpan>=1000时,为定时定位模式(setScanSpan的值就是定时定位的时间间隔);

定时定位模式中,定位SDK会按照APP设定的时间定位进行位置更新,定时回调定位结果。此种定位模式适用于希望获得连续定位结果的情况;

对于单次定位类应用,或者偶尔需要一下位置信息的应用,可采用APP主动请求定位这种模式。

20. 百度地图定位SDK是否有接口限制?

目前没有任何限制,但不支持多线程并发访问。

21. at com.baidu.location.LocationClient.byte(Unknown Source)报空指针

一般是由于开发者没有设定listener导致的,请参考DEMO具体开发逻辑,正确配置SDK。

22. 定位SDK中的LocationClient. isStarted()表征未启动

定位SDK启动时是异步启动的,start之后不会立即返回,所以立刻去检查isStarted状态就返回未启动;实际上定位SDK在start之后会默认发起一次定位请求,开发者无须检查这个函数,只要等着定位回调就可以了。

23. 能返回方向信息吗?

目前只有在GPS可用时能返回有效的方向信息,在GPS无效时,也可以配置选择返回手机方向传感器的数值,但有可能跟用户真实的方向信息有误差。

24. 百度地图定位SDK使用什么坐标系?

百度地图定位SDK,根据开发者的输入参数设置,可以返回三种类型的坐标,分别是国测局坐标、百度墨卡托坐标和百度经纬度坐标;

其中百度经纬度坐标能无偏差地显示在百度地图上;

如果当前定位点为海外,默认且只能返回WGS84类型的坐标。

25. 百度地图采用何种坐标体系?

百度地图采用BD09,即百度坐标系。百度地图开放平台所提供的各种服务,均支持多种类型坐标系经纬度的输入和输出。同时我们也提供了官方的坐标转换接口,便于广大开发者使用,请开发者切勿从非官方渠道获得坐标转换方法。各平台坐标转换方法如下:

(1)Android地图SDK:http://lbsyun.baidu.com/index.php?title=androidsdk

(2)iOS地图SDK:http://lbsyun.baidu.com/index.php?title=iossdk

(3)Web API服务:http://lbsyun.baidu.com/index.php?title=webapi

26. 什么是国测局坐标、百度坐标、WGS84坐标?

三种坐标系说明如下:

(1)WGS84:表示GPS获取的坐标;

(2)GCJ02:是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系;

(3)BD09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中BD09II表示百度经纬度坐标,BD09MC表示百度墨卡托米制坐标。

27. 坐标体系是否遵循国家对地理信息保密要求?

百度对外接口的坐标系,都是经过国家测绘局加密处理,符合国家测绘局对地理信息保密要求。

28. 百度坐标为何有偏移?

国际经纬度坐标标准为WGS84,国内必须至少使用国测局制定的GCJ02坐标系对地理位置进行首次加密。百度坐标在此基础上,进行了二次加密措施,进一步保护了个人隐私。

29. 如何处理定位SDK坐标发生漂移或者误差较大的情况?

目前定位SDK的定位精度很高,一般不会出现漂移较大的情况,如果出现,您可以通过一下两方面来处理:

(1)如偏移概率很高时,请确认自己设置的坐标系与展示地图的坐标系一致,目前定位SDK支持三种坐标系类型,其中bd09ll可以无偏移的展示在百度地图上;

(2)如果在确认坐标系无误的情况,定位结果仍发生了很大的偏移,请将IMEI号和大体定位时时间等信息在线反馈 给我们。

30. 如何从其他体系的坐标迁移到百度坐标?

百度地图开放平台提供了官方的坐标转换接口,请开发者直接选择使用。开发者切勿从非官方渠道获得坐标转换方法。各平台坐标转换方法如下:

(1)Android地图SDK:http://lbsyun.baidu.com/index.php?title=androidsdk

(2)iOS地图SDK:http://lbsyun.baidu.com/index.php?title=iossdk

(3)Web API服务:http://lbsyun.baidu.com/index.php?title=webapi

还是没有解决您的问题?请创建问题吧!