【问题标题】:Start location strategy启动定位策略
【发布时间】: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);

但是我发现了一种模式(在幻灯片 9596 上的演示文稿 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

标签: android location


【解决方案1】:

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

Google 的工程师尝试了很多不同的策略,结果就是“融合位置提供程序”。它的质量显示在视频中的 12:17。

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

【讨论】:

  • Fused location provider是否需要AlarmManager和WakeLock来频繁获取位置并防止设备休眠甚至在应用程序处于后台时获取位置?还是 Fused 自己做,AlarmManager 和 WakeLock 在 Google Play API 中?
【解决方案2】:

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

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

然后,一旦您得到响应,您就可以切换到您的 gps 硬件。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 2021-11-11
    • 1970-01-01
    • 2018-06-30
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多