15

我不确定这是否是新的 Android GeoFence 示例代码的错误,或者我对它应该做什么的理解是错误的。示例应用程序创建地理围栏,但在地理围栏被破坏时不会发出警报。如果有人想尝试并确认,您可以从这里下载示例代码:

https://developer.android.com/training/location/geofencing.html

这是我期望示例应用程序执行的操作:

  • 设置 2 个不同的地理围栏。就我而言,我通过输入它们各自的纬度/经度来选择相隔一英里的 2 个点。我还将半径设置为 250m 。
  • 我一个接一个地开车到这两个位置,我认为会弹出一个通知,表明地理围栏已被破坏。

在这种情况下,没有注册任何通知或任何日志消息,这意味着从未调用过“ReceiveTransitionsIntentService”。一个观察结果是,当我开车到第一个位置,然后在该位置添加一个新的地理围栏时,通知会立即触发,但是我设置并开车到的任何其他位置(地理围栏)都没有任何反应。

知道为什么吗?我对示例应用程序功能的理解是否正确?

除了示例代码中的内容之外,我是否需要做任何其他事情才能在我驾驶时违反地理围栏时收到警报?地理围栏监控是否与创建地理围栏分开,我在这里缺少什么?

非常感谢任何输入,我们非常渴望在我们的应用程序中使用它,但现在我们被卡住了。

谢谢,托里。

4

6 回答 6

10

首先,您对应用程序功能的理解是正确的。每当您进入/离开您的一个地理围栏时,它都会在通知中向您显示(它总是在更新相同的通知,所以请留意它,否则您可能会错过其中一个事件)。

其次,要小心,因为默认情况下,地理围栏 1 仅触发ENTER事件。因此,如果您在进入该地理围栏区域后离开该区域,您将不会收到通知!您可以在 MainActivity.java 上创建 mUIGeofence1 对象时更改此行为。

最后,与所有与位置有关的事情一样,这个 API 并不完美。从我的测试到目前为止,我从未见过它启动 GPS,所以当在外面时,它似乎几乎依赖于网络位置,而这些位置很容易不会掉下来即使您正站在半径 500 米的地理围栏中间。在 IO 的一次演讲中,Reto Meier 提到 API 足够聪明,可以以最佳方式处理电池消耗,因此它只会在用户开始接近地理围栏时打开 GPS——这是有道理的——但这不幸的是,似乎永远不会发生。

于 2013-05-27T10:04:27.400 回答
2

API 永远不会“打开”GPS。您必须自己启动 GPS。

于 2013-05-29T16:44:51.107 回答
1

一开始我也是这么想的。这是因为半径以米为单位,我认为它会以公里/英里为单位。所以我输入了非常小的值。然后经过几次实验,我发现了这一点。输入更大的值,它在我的 Nexus 5 上就像魅力一样

于 2014-10-11T17:04:10.620 回答
1

还要确保您已将半径设置得足够大。我建议将其设置为 1000 只是为了看看它是否有效。我还在玩它,但这里的示例代码确实可以正常工作:

如何使用 Android 地理围栏 API?

于 2013-06-02T00:31:05.347 回答
0

我尝试了 GeofenceDetection 示例代码,它正在工作。我只使用 Wifi 和 GPS,并将我的半径设置为 15 米。当我走到该地区时,它不会立即显示通知。几秒钟后,我收到了“进入”通知。此外,即使我在该地区静止不动,有时我也会收到通知说我正在离开该地区。它使应用程序感觉像是在一个区域进进出出。

于 2013-06-27T18:40:49.650 回答
0

我编写了一个同时使用 Google Play Services Location 和 Geofence API 的测试应用程序。我使用位置 API 以 1 秒的速度获取当前位置。当我设置我的地理围栏时,我显示了从当前位置到地理围栏中心的距离,每当位置更新时都会更新。

设置地理围栏后,我立即获得了进入事件。我清除了该事件并在地理围栏半径之外散步。显示的距离疯狂地滞后。这个位置花了大约三分钟才赶上我。在回家的路上也发生了类似的滞后。

Pity Play Services 是封闭源代码,我很想了解他们算法的局限性。

于 2014-08-01T05:19:18.560 回答