21

我一直在测试新的 Google Play 地理围栏服务 API。

我从Android 开发者网站下载了示例代码。接下来,我在 Android 设备 (Galaxy Note 2) 上运行示例代码。我将办公室的地理位置和半径设置为10m,但是当我走到办公室时,什么也没发生。

在运行示例代码时,我注意到的一件事是,当我已经在地理围栏范围内然后将地理围栏添加到 时LocationClient,什么也没有发生。

我已经阅读了LocationClient类文档,并找到了以下段落:

如果用户禁用了网络位置提供程序,则地理围栏服务将停止更新,所有已注册的地理围栏将被删除,并由提供的待处理意图生成意图。在这种情况下,hasError(Intent)返回 true 并getErrorCode(Intent)返回GEOFENCE_NOT_AVAILABLE。"

所以我打开了 WiFi,然后走到我的办公室(在地理围栏内),然后我收到了“进入地理围栏”的通知。

我有以下问题:

  1. 地理围栏是否仅在启用 WiFi 的情况下工作?

  2. 为什么我的 3G 网络提供的位置不起作用?

  3. 这是示例代码中的错误吗?

  4. 还是这是我的错?

4

5 回答 5

5

如果你只使用蜂窝网络,定位精度低于 wi-fi 或 gps 的精度(如果你打开谷歌地图,蓝色圆圈是你当前位置的估计 - 如果你只使用 3GP,圆圈可以有半径甚至数百米)。

最近几天我正在使用地理围栏开发一个应用程序,我发现了以下内容:恕我直言,只有当所有这个“位置估计圈”都在地理围栏半径内时,才会触发地理围栏条目,即如果你有 100% 的机会进入地理围栏. 所以这取决于你设置的半径有多大。如果您仅设置 10 米,则它可能仅适用于 GPS,而不适用于 3GP。对于 3GP,您必须将半径设置为 1000 米。

于 2013-06-02T14:19:09.733 回答
1

我想我会在这里分享我的结果。我也开发了一个实现 Google Play Services Location API 和 Geofence API 的实验室应用程序。我的结果表明,定位代码有一种病态的无法承认错误。:)

当按下按钮时,我的应用程序会在位置 API 返回的当前位置(“curLoc”)创建一个半径为 30 米的地理围栏。在屏幕上,我通过调用 curLoc.distanceTo(fenceLoc) 并大约每秒更新一次来显示到地理围栏中心的距离(“distToCenter”)。

我启动应用程序并等待精度稳定(通常为 10.0 米),然后按下按钮创建围栏。我立即收到“进入”事件。我清除事件并去散步,显然进入了时空异常。我走下街区,绕过拐角,distToCenter 值只增加了大约 4 米。我走得更远,直到我离我家大约 300 米(通过计算步数来判断)并且 dstToCenter 逐渐增加。地理围栏退出事件最终在 dstToCenter 超过 30 米后大约 20 秒触发。

我等着看距离稳定在哪里,大约是 150 米左右。我转身回家,同样的极端位置滞后发生了。我在我的办公桌前坐下,而我的虫洞自我仍在大约 90 米之外。大约 40 秒后,我的分身进入栅栏内,大约 20 秒后,我得到了进入事件。

此时我仍然在前面人行道上的某个地方(7.4 米远),慢慢地走向前门。

注意:尽管我确实看到 GPS 状态栏图标在我失去与我的 WiFi 的连接后闪烁了几秒钟,但源始终是“融合”的。更重要的是,精度从 10.0 米起从未动摇。

骗子!

:)

于 2014-08-01T05:02:26.447 回答
1

Wifi 用于帮助跟踪您的位置。使用 wifi 信号和蜂窝信号对您的位置进行三角测量是一种比让 GPS 持续运行更省电的解决方案。此外,它还可以在 GPS 不支持的情况下工作,例如繁重的多路径区域和室内。

于 2013-05-28T19:44:46.087 回答
1

在网络条件下,您必须增加半径至少 1000 M,因为使用网络提供商检索当前位置,它从网络塔附近获取位置。但在 GPS 和 wifi 条件下,它的工作更准确(1 M还)。

于 2013-06-25T10:05:07.187 回答
0

我测试了示例地理围栏应用程序,如果 WiFi 关闭,它不会在低于 Android 4.3 的版本上检测到地理围栏事件。

即使 WiFi 关闭,Android 4.3 及更高版本也能正常工作。

于 2014-03-18T23:07:42.330 回答