2

如何改善 Android 平台上慢速 GPS 信号采集?

我正在测试一个基于此开源代码的简单 GPS 记录器,虽然它似乎可以工作,但它可能需要 10-15 分钟才能首先获取信号并开始显示 GPS 坐标。然而,在同一台设备上运行谷歌地图应用程序似乎几乎可以立即获得信号(它甚至能够实时检测我所面对的方向),而 GPS 记录器服务仍然表示它找不到信号。

为什么谷歌地图获取 GPS 信号的速度如此之快,而标准的 GPS 系统服务却需要很长时间?

我拥有的启动 GPS 服务的具体代码是:

private void startLoggerService() {
    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locationListener = new MyLocationListener();
    lm.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, 
        2000, 
        1,
        locationListener);
}
4

3 回答 3

8

在使用位置数据时,您应该注意并一定要考虑以下几点:

  • 不要只依赖 GPS 传感器。尽管 GPS 可能会为您提供最准确的结果,但它相对较慢且非常耗电。相反,还向网络提供商请求位置更新:LocationManager.NETWORK_PROVIDER。在大多数情况下,这将提供足够准确的结果以在您的应用程序中使用(我玩过的大多数设备似乎产生大约 60~65m 的最坏情况精度),但更重要的是:它要快得多。请注意,与 GPS 一样,用户可以在系统设置中自行启用和禁用功能。有关更多详细信息,请参阅使用位置管理器
  • 想想您需要多久更新一次位置信息。如果可能,请防止持续更新(这会立即耗尽电池)并在收到所需数据后立即释放传感器。此外,一个好的做法是在一定程度上缓存位置 - 即使它不完全准确,用户也会立即获得反馈。您可以将其与一些考虑时间戳的逻辑结合起来。
  • 使用 Android 开发者网站上已有的资源。例如,有一个关于位置策略的主题值得一读。另一个很好的资源是Reto Meier 的博客文章和他的开源项目,该项目实现了他的 Android Protips for Location。如果您有时间,还可以查看他的Google I/O 2011 演示文稿,该演示文稿讨论了基于位置/位置感知的 Android 应用程序的最佳实践。

附带说明:您面对的方向的实时指示与位置无关,而是来自磁场传感器(阅读:数字罗盘)或陀螺仪。两者都处理设备的方向,而不是位置。

于 2012-07-18T22:17:29.463 回答
2

代码中的 1 表示提供商只会在您的设备移动 1 米时广播该位置。尝试将此设置为 0。

API 文档指出:

“可以使用 minTime 和 minDistance 参数控制通知的频率。如果 minTime 大于 0,LocationManager 可能会在位置更新之间休息 minTime 毫秒以节省电力。如果 minDistance 大于 0,则只会广播位置如果设备移动 minDistance 米。要尽可能频繁地获取通知,请将两个参数都设置为 0。

于 2012-07-18T19:33:11.740 回答
0

如果谷歌地图显示你的方向,它必须使用 GPS 定位。Google 地图必须使用最新的 gps 修复程序,您可以使用Location.getLastKnownLocation获得。据推测,如果该位置不是太旧,谷歌地图认为它总比没有好,并在您等待新的 GPS 修复时显示给您。

当您在室内时,GPS 修复通常会非常缓慢或根本没有。我假设您在开发时正在尝试获取 GPS 修复?你可能不得不起床走到外面。

许多手机都有相当糟糕的gps接收器。即使在晴朗的户外天空中,我也拥有手机,这需要很多分钟才能获得第一个 GPS 定位。它很烂,而且是抄袭,但这是真的。

于 2012-07-19T13:40:02.520 回答