【发布时间】:2011-10-12 11:29:07
【问题描述】:
我通过 GPS 定期接收位置更新,问题是直到第一次位置更新发生的时间 - 它只是太长了。当用户在建筑物内时,这个时间会变得更糟。
因此我正在寻找一些改善启动时间的策略(目前我不使用getLastKnownLocation,但我会使用)。我开始阅读A Deep Dive Into Location 以获得一些想法,现在我想和你讨论一些想法。
首先,上面提到的博客文章通过设备上的每个位置提供程序并查询getLastKnownLocation,但仅在它们不旧且在允许的精度范围内时才考虑它们。
这是我的第一个问题:我希望基于网络的位置立即可用,所以我会请求一个新的基于网络的位置,然后我会从 GPS 提供商那里得到getLastKnownLocation,如果最后一个 GPS 位置在由基于点网络的位置和半径精度形成的圆圈内,那么我会采用 GPS 位置,不管它有多旧。你怎么看?
检查最后一个已知位置后,我将开始 GPS 位置跟踪,因为我只需要每 2 秒和 10m 变化一次,我会使用
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);
但是我发现了一种模式(在幻灯片 95 和 96 上的演示文稿 Being Epic: Best Practices for Android Development 中,首先他打开了粗略和精细位置(时间和距离变化为 0,0),然后,当收到第一个事件,他切换到真正需要的更新频率。那么,当间隔设置为0时,第一次gps-update来得更快吗?
与此模式相反,我将保持粗略更新,直到收到第一个 GPS 更新。你怎么看?
希望能得到一些有趣的答案!
----------------更新----------------
我做了一些调查:我打开 GPS 并等待修复。然后我关掉 GPS,开了 50 公里(31 英里)。然后我使用来自A Deep Dive Into Location 的代码来获取所有getLastKnownLocation。我试了两次,第一次关闭 GPS,第二次打开 GPS,但没有修复:
1) 关闭 GPS 我得到了
- 提供者:网络,正确的位置,精度为 680m
- 提供者:被动(mProvider=network),位置同上,时间同上
- 提供者:gps,位置 null
所以我了解到,当 gps 关闭时,您不会收到 getLastKnownLocation。
2) 打开 GPS 我得到了
- 提供者:网络,正确的位置,精度为 652m
- 提供者:被动(mProvider=network),位置同上,时间同上
- 提供者:gps,位置早 2 小时,精度 12 m,时间也早 2 小时
在这里我了解到旧消息不会失效,即使它们很明显是错误的。
在这种情况下,算法运行良好,因为我在关闭 GPS 时搬家了。 但是,如果我进入一所房子怎么办?在那种情况下,2h 旧的 GPS 结果会非常好,即使它已经过时了。
【问题讨论】:
-
在谷歌地图中绘制位置的好链接,包括半径(精度):freemaptools