为融合定位服务选择准确性优先级的最佳策略?

Posted

技术标签:

【中文标题】为融合定位服务选择准确性优先级的最佳策略?【英文标题】:Best strategy for picking accuracy priority for Fused Location Services? 【发布时间】:2014-07-28 08:34:03 【问题描述】:

我正在构建一个要求每 5 分钟记录一次位置坐标的应用。因为我的目标设备是三星设备,通过原生 android 位置库从网络提供商获取时存在问题,所以我选择使用 Google Play 服务中的 Fused Location Services。

显然使用PRIORITY_HIGH_ACCURACY 是最好的,因为它会使用所有提供者来获得最佳位置。问题是这会过快耗尽电池。我想根据情况在PRIORITY_BALANCED_POWER_ACCURACYPRIORITY_HIGH_ACCURACY 之间切换。

目前,我有它,所以当有互联网连接(通过 ping 特定站点确认)时,我使用PRIORITY_BALANCED_POWER_ACCURACY。如果没有,我使用PRIORITY_HIGH_ACCURACY。我想知道这是否是最好的方法,因为可能存在用户没有连接到任何 WIFI,但打开了 WIFI 并且处于 WIFI 拥挤区域的情况。除了检查连接之外,如果连接失败,我是否应该检查可用的 WIFI 接入点,如果找到了,是否仍然使用PRIORITY_BALANCED_POWER_ACCURACY

【问题讨论】:

嘿,我很想听听您的“通过本机 Android 位置库从网络提供商获取的问题”。我有一个基于位置的应用程序,我们也遇到了三星手机的问题。然而,我们切换到 fused,有时我们仍然会看到它们。您遇到什么样的问题?您可以指出一些资源吗?输入将不胜感激! 【参考方案1】:

为什么不运行一个线程或意图服务来定期检查应用的电池电量。当级别低于某个阈值时,调用 removeLocationUpdates() 并通过使用具有“PRIORITY_BALANCED_POWER_ACCURACY”的 LocationRequest 对象调用 requestLocationUpdates() 再次注册

此外,您可以使用 WifiManager 类检查用户是否在 Wi-Fi 拥挤区域,您可以使用 startScan() 扫描 wifi 热点并在广播接收器中注册结果并根据结果进行更改。

我认为无法确定用户是否在室内。 gps 信号通常在室内较弱,您可能可以使用 GpsStatus 类和 getSatellites() 方法来推断出一些相关知识。

【讨论】:

谢谢。我认为这个策略必须要做。【参考方案2】:

您的 5 分钟要求有多灵活?我不确定这对您的应用程序是否可行,但您可能希望允许用户在设置菜单中为自己选择精度。您可以提供分别使用PRIORITY_BALANCED_POWER_ACCURACY 和 PRIORITY_HIGH_ACCURACY 的低功耗选项和高精度选项。另一种选择是提供一个滑块,以便用户可以设置位置更新之间的间隔时间,并使用PRIORITY_BALANCED_POWER_ACCURACY 用于长间隔,PRIORITY_HIGH_ACCURACY 用于短间隔。

【讨论】:

5 分钟的要求是必须的。至于让用户决定,让我们说我正在制作这个应用程序的用户群在技术上没有足够的责任感来做出正确的决定。我基本上希望能够感知它们是否在内部,使用 PRIORITY_BALANCED_POWER_ACCURACY(因为它在室内具有相当不错的精度而不会耗尽电池),当它们在室外时,它使用 PRIORITY_HIGH_ACCURACY 来包含 GPS 提供程序。是否有任何策略来感知设备是在室内还是室外?

以上是关于为融合定位服务选择准确性优先级的最佳策略?的主要内容,如果未能解决你的问题,请参考以下文章

地理围栏最佳策略

定位用户的最佳方式[关闭]

如何编写高质量的缺陷报告

融合位置 API 在关闭谷歌地图后给出高度不准确的位置

NGINX 负载均衡策略之「快者优先」的 Lua 实现

PlayFramework 应用程序的最佳部署策略?