提高Android GPS性能

时间:2012-07-18 18:41:56

标签: java android gps

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

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

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

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

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

3 个答案:

答案 0 :(得分:8)

在使用位置数据时,您应该注意一些事项,并且一定要考虑到这些:

  • 不要只依赖GPS传感器。尽管GPS可以为您提供最准确的结果,但它相对较慢并且非常耗电。相反,还要求网络提供商更新位置:LocationManager.NETWORK_PROVIDER。在大多数情况下,这将给出足够准确的结果,以便在您的应用中使用(我玩过的大多数设备似乎都会产生大约60~65米的最差情况),但更重要的是:它更快,更快。请注意,与GPS一样,用户可以在系统设置中启用和禁用功能。有关详细信息,请参阅Using the Location Manager
  • 考虑您需要多久更新一次位置信息。如果可能,请阻止持续更新(这将在没有时间内耗尽电池)并在收到所需数据后立即释放传感器。此外,一个好的做法是在一定程度上缓存位置 - 即使它不完全准确,用户也会立即获得反馈。您可以将此与一些考虑时间戳的逻辑结合起来。
  • 使用Android Developer网站上已有的资源。例如,Location Strategies上有一个值得阅读的主题。另一个很好的资源是blog post by Reto Meier和他的open source project,它实现了他的Android Protips for Location。如果您有时间,还可以查看讨论基于位置/位置感知的Android应用的最佳做法的Google I/O 2011 presentation

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

答案 1 :(得分:2)

代码中的1表示如果设备移动1米,提供商将仅广播该位置。尝试将其设置为0.

API文档声明:

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

答案 2 :(得分:0)

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

当您在室内时,GPS修复通常会非常缓慢或根本不会。我假设你正在开发你试图获得GPS修复?你可能不得不站起来走出去。

许多手机都有相当糟糕的GPS接收器。即使在晴朗的室外天空,我也拥有手机,这需要花费很长时间才能获得第一个GPS定位。它糟透了,它是一个骗局,但它是真的。