如何使用Android Geofencing API?

时间:2013-05-27 08:59:59

标签: android android-geofence

我一直在测试新的Google Play Geofencing服务API。

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

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

我已阅读LocationClient class documentation,并找到以下段落:

  

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

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

我有以下问题:

  1. 地理围栏是否仅适用于WiFi?

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

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

  4. 或者这是我的错误?

5 个答案:

答案 0 :(得分:5)

如果您只使用移动网络,定位精度低于Wi-Fi或GPS的准确度(如果您打开谷歌地图,蓝色圆圈是您当前位置的估计 - 如果您只使用3GP,那么圈子可以有半径甚至几百米)。

最后几天我正在使用Geofences开发应用程序,我想出了以下内容:恕我直言,只有当所有这个“位置估算圈”都在地理围栏半径内时才触发地理围栏入口,即如果你有100%的机会进入了地理围栏。所以这取决于你设置的半径。如果你只设置10米,它可能只适用于GPS,从不使用3GP。对于3GP,你必须设置半径1000米。

答案 1 :(得分:1)

Wifi用于帮助跟踪您的位置。使用wifi信号和信元信号对您的位置进行三角测量是一种比GPS不断运行更省电的解决方案。此外,它适用于GPS不会像重型多径区域和室内那样的情况。

答案 2 :(得分:1)

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

答案 3 :(得分: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秒后,我的doppleganger进入围栏内,大约20秒后,我得到了输入事件。

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

注意:来源是"融合"尽管我确实看到GPS状态栏图标出现并且在我失去与WiFi的连接后闪烁了几秒钟。更重要的是,精度从未在10.0米处波动。

骗子!

:)

答案 4 :(得分:0)

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

Android 4.3及更高版本的工作甚至WiFi都关闭。