我正在开发一个需要跟踪当前位置的应用程序,而且需要很长一段时间。
我决定使用Fused Location Provider API,因为它专为节省电池和提高效率而设计。
经过一段时间的测试,我最终在融合位置提供程序api中遇到了几个突破性问题,甚至在NETWORK_PROVIDER
中的软件堆栈中更深层次(我相信它正被融合使用)位置提供者)。
我已经尝试了所有类型的LocationRequest优先级和许多各种参数。非固定WIFI问题仍然存在于所有情况下,并影响设备上的所有应用,包括谷歌自己的应用。
首先想到的是只是试图忽略通过WIFI三角测量进入的位置锁,但由于无法知道位置来自使用Fused位置api的位置,因此该想法是一个deadend。
过滤掉这些位置也非常棘手,因为设备经常在错误的位置停留数小时/天并移动到那里。
我发现已经有一些谷歌错误跟踪器问题已经开启,至少提到问题1.(例如https://issuetracker.google.com/issues/37123060) 这些问题都没有得到解决。
我正在考虑放弃Fused Location提供商,因为我尝试的所有东西都是deadend。 这导致我提出以下问题:
感谢您的帮助。
修改 现在正在讨论这个问题 https://issuetracker.google.com/issues/37058437
**编辑(2017年8月8日) 在位置回调中添加了另一个奇怪的发现
答案 0 :(得分:0)
首先,您需要停止将位置视为单个坐标。没有什么能帮到你。位置是概率字段。即使使用GPS,它所提供的位置也具有以米为单位的精度。用户有67%的可能性在它给你的位置的许多米范围内。这意味着他们没有1/3的机会。有时差异很大 - 如果你整夜运行gps,你会得到一些数百米的修复。你只需处理这个问题。
其次 - 融合是妥协。它的电池电量低于GPS,但精度较低。它足以满足大多数用途。它对您来说可能是也可能不够好。真正的问题是你真的需要超精确,并为你的用户增加价值吗?位置上的偶然错误值得耗尽他们的手机吗?这个答案根据您需要位置数据的频率而变化 - 如果您一直需要它,答案更可能是电池是个坏主意。
任何位置跟踪方法都存在问题。你只需要决定使用哪个是最不痛苦的。这是部分列表:
GPS-高精度,高电池使用,高启动时间,不在室内工作,政府可以降低准确性
信标 - 极高的准确度,需要蓝牙,只能在特定区域工作,需要外部硬件,可能被第三方欺骗(将他的信标ID设置为你的)
基于网络 - 低精度,低资源要求,如果在隔离区域(设置假wifi网络SSID)可能被第三方欺骗
Fused-使用gps和netork数据的组合。所以你有各自的问题。
答案 1 :(得分:0)
我认为应该理解精确度和电池消耗之间存在权衡。但这闻起来更像是一个臭虫。这就是为什么我这样说的一个例子:当我重新连接到我的家庭WiFi时,我的手机非常清楚我不再在檀香山,因为我在达拉斯,波士顿和其他地方的回程中广泛使用它,包括使用谷歌地图让我到中间位置。然而,不知何故,谷歌数据库最终为我的家庭WiFi提供了虚假的位置檀香山,以便当其他人连接到我的家庭WiFi时,他们开始零星地获取檀香山的天气更新!现在如果我的手机一直处于飞行模式,这会更有意义。但即便如此,压倒性的证据仍然是我的家庭WiFi就在这里,一部手机暂时报告错误的位置不应该改变它。