7

我正在开发一个使用位置数据的应用程序,它需要在中国工作。这里出售的 Android 设备基本上没有安装 Google Play API,唯一的方法是根手机安装它。所以我坚持使用 LocationManager,它比 LocationClient(Google Play API 的一部分)差得多。

我的问题是 LocationManager 在从 GPS_PROVIDER 读取时,经常无法连接到足够多的卫星(在中国),并且修复之间偶尔会有很大的时间间隔。从 NETWORK_PROVIDER 读取时,我可以获得更频繁的修复,但准确度范围从 30 到 500。远不及 LocationClient API 质量。

该应用程序应该经常监控您在街道上的移动,例如。每秒更新一次(高电池使用,对我的客户来说不是问题),并在您到达某些位置时做一些事情。

如果我使用 Google Play API 和 LocationClient,它确实运行良好。但这仅适用于 Nexus4 或某些非中文 Android 设备。

我在问是否有人知道比直接使用 LocationManager 可以提供更好结果的库,或者如何使用 LocationManager 来改善结果的解决方案?

4

1 回答 1

1

GPS 无法正常工作的原因可能是缺少所需的 GPS 元数据(星历和年历数据),或者是因为该元数据的获取速度较慢。对于后一种情况,在大多数国家,GPS 星历和历书数据可通过网络资源获得。如果没有,GPS 芯片必须从卫星上下载,这可能需要 5-20 分钟(最快的时间是初始数据流为 GPS 芯片提供了足够的信息来获取锁定)。我不熟悉通过网络资源在中国获得这些数据的情况,但从您的经历来看,这听起来似乎并不广泛。(谷歌的关键字以获取更多信息:SUPL、星历、年历)。

当 GPS 不可用或锁定速度较慢时,网络地理定位是备用,它使用 wifi 点和手机信号塔来三角定位位置。这需要设备的互联网服务发送它看到的 AP + 塔,然后该服务发回一个位置。30 到 500 米的精度水平非常适合这一点。

(顺便说一句,网络地理定位也用于“播种” GPS 芯片以帮助其更快地锁定)

Android 上的网络地理定位通常由谷歌网络服务提供,但手机可以配置为使用运营商的其他提供商。

您可以通过尝试 Mozilla 的免费网络地理定位服务来避免使用 Google(Google Play 或 Google 的网络地理定位服务器)或内置的网络定位服务: https ://location.services.mozilla.com/

您需要请求 API 密钥:https ://location.services.mozilla.com/api 对于代码示例:此应用程序既提供数据又是服务的客户端:https ://github.com/mozilla/MozStumbler

我怀疑这会为您所在的区域获得更好的网络地理定位精度,因为您已经获得了很好的结果,但也许值得研究。

于 2017-01-04T22:58:23.827 回答