我如何使用Android Geofencing API?

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

我从Android开发人员网站下载了示例代码。 接下来,我运行Android设备上的示例代码(Galaxy Note 2)。 我把我的办公室地理位置和半径放到了10米,但是当我走到我的办公室时,什么都没有发生。

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

我已经阅读了LocationClient类的文档 ,并发现以下段落:

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

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

我有以下问题:

  1. Geofencing是否仅在启用WiFi的情况下工作?

  2. 为什么我的3Gnetworking提供的位置不工作?

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

  4. 或者这是我的错误?

Related of "我如何使用Android Geofencing API?"

如果你只使用手机networking,定位的准确性比Wi-Fi或GPS的准确性要低(如果你打开Goog​​le地图,蓝色圆圈就是你当前位置的估算值 – 如果你只使用3GP,圆圈可以有半径甚至数百米)。

最后几天,我正在使用地理围栏的应用程序,我想出了以下内容:恕我直言,地理围栏条目只有在所有这个“位置估计圈”位于地理围栏半径范围内时才会触发,也就是说,如果您有100%的机会进入地理围栏。 所以这取决于你设置的半径大小。 如果你只设置10米,那么它可能只能用于GPS,而不能用于3GP。 对于3GP,你将不得不设置1000米的半径。

Wifi用于帮助跟踪您的位置。 使用无线信号和蜂窝信号三angular测量您的位置是一个更有效的解决scheme,而不是让您的GPS不断运行。 此外,它适用于GPS不会造成繁重的多path区域和室内的情况。

在这种情况下,networking状况必须增加半径至less1000米,因为使用networking提供商检索当前位置,它是从networking塔附近的位置,但在GPS和WiFi情况下,它的工作更精确(1 M也)。

我想我会在这里分享我的结果。 我也开发了一个实现Google Play服务位置API和Geofence API的实验室应用程序。 我的结果显示位置确定码有一种病态的不能承认错误。 🙂

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

我启动应用程序,等待精度稳定(通常在10.0米),然后按button创build围栏。 我立即得到“enter”事件。 我清除了事件并散步,显然进入了一个时空exception。 我沿着街区走下去,distToCenter的值只增加了4米左右。 我走得更远,直到我离我家大约300米(通过计数步骤来判断),dstToCenter逐渐增加。 在dstToCenter超过30米后,地理围栏退出事件最终会发射大约20秒。

我等待距离稳定在150英尺左右。 我转身回家,发生同样的极端位置滞后。 我坐在办公桌前,而我的虫洞仍然在大约90米远的地方。 大约40秒后,我的doppleganger进入围栏,大约20多秒后,我得到了进入事件。

在这一点上,我仍然在前面的人行道上(7.4米外),朝着前门走去。

注意:虽然我确实看到GPS状态栏图标亮起,并且在丢失与WiFi的连接后闪烁几秒钟,但信号源始终“融合”。 更重要的是,准确度从10.0米开始一直没有动摇。

骗子!

🙂

我testing了示例地理栅栏应用程序,如果WiFi处于closures状态,则不会在Android 4.3以上的版本上检测到地理栅栏事件。

Android 4.3及以上版本甚至WiFiclosures。