启动位置策略

时间:2011-10-12 11:29:07

标签: android location

我定期通过GPS接收位置更新,问题是第一次位置更新发生的时间 - 它只是很长。当用户在建筑物内时,这个时间会变得更糟。

因此,我正在寻找一些改善启动时间的策略(目前我不使用getLastKnownLocation,但我会)。我开始阅读A Deep Dive Into Location以获得一些想法并想出一些想法,现在我想和你讨论。

首先,上面提到的博客文章会浏览设备上的每个位置提供商并查询getLastKnownLocation,但只会在他们不老到且在允许的准确度范围内时才考虑它们。

我的第一个问题是:我希望基于网络的位置立即可用,所以我会请求一个新的基于网络的位置,然后我会从GPS提供商获得getLastKnownLocation,如果是最后一个GPS - 位置在由基于点网络的位置和半径精度形成的圆内,然后我将采用GPS位置,无论它多大年纪。你觉得怎么样?

在检查完最后一个已知位置后,我将开始GPS位置跟踪,因为我每2秒只需要它10米,我会使用 lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);

但是我发现了一种模式(在幻灯片Being Epic: Best Practices for Android Development95的演示文稿96内部),他首先打开了粗略和精细的位置(时间和距离变化为0,0)然后,当收到第一个事件时,他切换到真正需要的更新频率。那么,当间隔设置为0时,第一个gps-update会更快吗?

与此模式相反,我将保持粗略更新,直到收到第一个GPS更新。你觉得怎么样?

希望得到一些有趣的答案!

----------------更新----------------

我做了一些调查:我打开GPS并等待修复。然后我关掉GPS并开了50公里(31英里)。然后我使用A Deep Dive Into Location中的代码获取了所有getLastKnownLocation。我尝试了两次,首先关闭GPS,然后打开GPS,但没有修复:

1)关闭GPS我得到了 - 提供商:网络,正确的位置,准确度680米
- 提供者:被动(mProvider =网络),与上述相同的位置,同时如上所述 - 提供者:gps,location null

所以我了解到,当关闭gps时,你得不到getLastKnownLocation

2)打开GPS,我得到了 - 提供商:网络,正确的位置,准确度652米
- 提供者:被动(mProvider =网络),与上述相同的位置,同时如上所述 - 提供者:gps,位置早于2小时,准确度为12米,时间也提前2小时

在这里,我了解到旧消息没有失效,即使它们显然是错误的。

在这种情况下算法运行正常,因为我在关闭GPS时移动了。 但是如果我进房子怎么办?在这种情况下,即使它过时,2小时的GPS结果也会非常好。

2 个答案:

答案 0 :(得分:4)

在Google IO 2013中,他们在会话Beyond the Blue Dot: New Features in Android Location中展示了一种新方法,请参阅视频here

Google的工程师尝试了很多不同的策略,结果就是“Fused location provider”。它的质量在视频中显示为12:17。

Ketan Parmar发布了blog post如何在示例应用程序中使用融合位置提供程序。

答案 1 :(得分:0)

首先使用被动提供程序启动位置管理器

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, AlarmManager.INTERVAL_FIFTEEN_MINUTES, 75, this);

然后,一旦你收到回复,就可以切换到你的gps硬件了。

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);