如何改进android平台上的慢速gps信号采集?
我正在测试一个简单的基于this open source code的gps记录器,虽然它似乎可以工作,但它可能需要10-15分钟才能首先获取信号并开始显示gps坐标。然而,在同一台设备上运行谷歌地图应用程序似乎几乎可以立即获得一个信号(它甚至可以实时检测到我面对的是哪个方向),而GPS记录器服务仍然表示找不到信号。
为什么谷歌地图在获取全球定位系统信号时如此之快,而标准的全球定位系统服务却需要永远的时间?
启动GPS服务的具体代码是:

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

最佳答案

在使用位置数据时,有几件事您应该注意并明确考虑:
不要仅仅依靠GPS传感器。虽然gps可能给你最准确的结果,但它相对较慢,而且相当耗电。此外,还请求来自网络提供商的位置更新:LocationManager.NETWORK_PROVIDER。在大多数情况下,这将给出一个精确到足以在你的应用程序中使用的结果(我玩过的大多数设备似乎产生了大约60~65米的最坏情况精度),但更重要的是:它的速度快得多。请注意,与GPS一样,用户可以在系统设置中启用和禁用功能。有关详细信息,请参见Using the Location Manager
想想你多久需要更新一次位置。如果可能的话,防止持续更新(这将耗尽电池在任何时间),并释放传感器一旦你收到你需要的数据。另外,一个好的做法是在一定程度上缓存位置—即使它不是完全准确的,用户也会立即得到反馈。你可以将它与一些考虑时间戳的逻辑相结合。
使用android开发者网站上已有的资源。例如,有一个关于Location Strategies的主题值得一读。另一个好的资源将是blog post by Reto Meier和他的open source project来实现他的android定位protips。如果你有时间,也可以浏览他的Google I/O 2011 presentation,讨论基于位置/位置感知的Android应用程序的最佳实践。
一个侧面说明:你所面临的方向的实时指示与位置无关,但来自磁场传感器(Read:数字罗盘)或陀螺仪。两者都处理设备的方向,而不是位置。

关于java - 改善Android GPS性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11548196/

10-13 03:29