2012-07-18 40 views
2

如何改进Android平台上的慢速GPS信号采集?提高Android GPS性能

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

为什么Google地图在获取GPS信号的速度如此之快,而标准的GPS系统服务永远占用?

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

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

回答

6

有几件事情你应该知道的,肯定考虑到,当涉及到使用位置数据:

  • 不要仅仅依靠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。如果您有时间,还可以参考他的Google I/O 2011 presentation,讨论基于位置的/位置感知Android应用的最佳做法。

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

2

1.在你的代码意味着该供应商将只播出位置应1米你的设备移动。尝试将其设置为0。

API文档状态:

“的通知的频率可以使用minTime和minDistance才会参数来控制如果minTime是大于0,所述的LocationManager可能休息之间minTime毫秒如果minDistance大于0,则只有当设备通过minDistance米移动时才会广播一个位置。要尽可能频繁地获取通知,请将这两个参数设置为0。

0

如果谷歌地图显示你的方向,它必须使用GPS修复。Google地图必须使用最新的GPS定位,您可以使用Location.getLastKnownLocation。据推测,如果该位置不是太旧谷歌地图决定它比没有更好的方式,并显示它给你,而你等待新的GPS修复。

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

许多手机有相当糟糕的GPS接收器。即使在晴朗的室外空中,我也拥有需要几分钟才能获得第一次GPS定位的手机。它吮吸和它的一个撕掉,但它是真的。

+0

谷歌地图上的方向指示器使用取向方向传感器(磁性和陀螺仪)。地图上的位置来自粗略或精细的位置服务(粗糙的塔和罚款的gps)。 – 2012-07-20 05:21:32