我该如何使用Android Geofencing API?

21
我一直在测试新的Google Play Geofencing服务API。我从Android开发者网站下载了示例代码。接下来,我在Android设备(Galaxy Note 2)上运行了示例代码。我将我的办公室地理位置和半径设置为10米,但当我走到办公室时,什么也没发生。
在运行示例代码时,我注意到一件事情,即当我已经在地理围栏范围内时,然后将地理围栏添加到LocationClient中,什么也不会发生。
我已经阅读了LocationClient类文档,并找到了以下段落:
如果用户禁用了网络位置提供者,则地理围栏服务将停止更新,所有已注册的地理围栏将被删除,并生成一个由提供的挂起意图引发的意图。在这种情况下,“hasError(Intent)”返回true,“getErrorCode(Intent)”返回“GEOFENCE_NOT_AVAILABLE”。
因此,我打开了WiFi,并走向我的办公室(在地理围栏内),然后我收到了“进入地理围栏”的通知。
我有以下问题:
1. 地理围栏只能与WiFi一起使用吗? 2. 为什么我的3G网络提供的位置不起作用? 3. 这是示例代码中的错误吗? 4. 还是我的错误?

我也有同样的问题,我发现我声明的地理围栏只有在我的设备连接了WiFi时才能正常工作...如果这是一个错误,那就相当令人不安。 - dleal
我能够在3G/4G/WiFi上触发地理围栏,但在3G/4G上,我必须将我的围栏半径设置得更大。正如Milos所建议的那样是正确的。我也想知道是否有人注意到了设置时的延迟时间?延迟是指当您进入地理围栏时...它不是即时的。 - reidisaki
我目前对这个示例项目感到有些困惑。什么是地理围栏1和地理围栏2?为什么我必须两次输入纬度、经度和半径? - TharakaNirmana
NetworkLocationProvider 不仅仅是指 WiFi,它还包括基站定位。据文档所述,即使 GPS 打开,如果用户关闭了“网络位置”,地理围栏 API 也无法工作,这真的很糟糕。 - Muhammad Babar
请注意,即使您获得了一个职位,它可能会被“过滤”,以至于实时更新不会发生。请参阅我在此线程中的其他答案。 - William T. Mallard
显示剩余4条评论
5个回答

5
如果你只使用移动网络,定位的准确度会比Wi-Fi或GPS低(如果打开谷歌地图,蓝色圆圈是您当前位置的估计值——如果仅使用3GP,则圆圈的半径甚至可能达到数百米)。
最近我一直在开发一个使用地理围栏的应用,并得出了以下结论:在我的观点中,只有当所有“位置估计圆”都在地理围栏半径内时,地理围栏入口才会被触发,也就是说,如果有100%的机会进入地理围栏,它才会被触发。因此,这取决于您设置的半径大小。如果您仅设置了10米,则仅可能通过GPS运行,而不是3GP。对于3GP,您将需要设置1000米半径。

6
实际上,我所做的测试表明,地理围栏触发器完全不关注准确性,不幸的是似乎没有任何方法可以设置是否需要准确性。在我的情况下,具有800-1500米精度的基站位置足以触发200米地理围栏的进入和离开事件。就像你猜到的那样,我每2分钟就收到一次进入/离开事件,甚至从未移动过。我希望我们能更好地控制并获得有关此API的预期文档,因为现在它似乎并不是很有用。 - rjam

1

Wifi用于帮助跟踪您的位置。使用wifi信号和手机信号来三角定位您的位置比持续运行GPS更节能。此外,它可以在GPS无法使用的情况下工作,例如重复路径区域和室内。


1
我想在这里分享我的结果。我也开发了一个实现Google Play服务位置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米),缓慢地向前门移动。
注意:尽管我已经失去了与WiFi的连接,但源始数据始终保持一致,我看到GPS状态栏图标闪烁了几秒钟。更重要的是,精度从未偏离10.0米。
骗子!:)

1

在网络条件下,您必须将半径至少增加1000米,因为使用网络提供商检索当前位置时,它会从附近的网络塔获取位置。但在GPS和WiFi条件下,它更精确(1米)。


1
当我测试开发者提供的地理围栏演示应用时,只有在我打开Wi-Fi并将半径设置为1000米时才会发送通知。在其他情况下,如网络、GPS和半径1、10、100米的情况下,我已经测试过它不会发送通知。你有任何想法吗? - Nitish Patel
1
我认为在网络的情况下,你应该将半径设为最小1000米,这对于WiFi的情况下适用。你可以设置任何半径,如1、10、100。 - RAHULRSANNIDHI
可以的,但是如果我想在GPS/2G/3G开启时收到通知应该怎么做呢?如果您有任何示例,能否请分享一下? - Nitish Patel
1
如果是2G/3G,请将半径设置为最小1000米,这样可以在开发者网站提供的示例情况下正常工作。 - RAHULRSANNIDHI

0

我测试了一个样例地理围栏应用程序,如果WiFi关闭,则在Android 4.3以下的版本中无法检测到地理围栏事件。

Android 4.3及以上版本即使WiFi关闭也可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接