我不确定这是错误与新的Android GeoFence示例代码,或者我对它应该做的事情的理解是错误的。示例应用程序会创建地理围栏,但在地理围栏被破坏时不会发出警报。如果有人想尝试并确认,可以从这里下载示例代码:
https://developer.android.com/training/location/geofencing.html
这就是我期待示例应用程序执行的操作:
在这种情况下,没有通知也没有注册任何日志消息,这意味着“ReceiveTransitionsIntentService”从未被调用过。一个观察结果是当我开车到第一个位置然后在该位置添加新的地理围栏时,通知会立即触发,但任何其他位置(地理围栏)我设置和开车,没有任何反应。
知道为什么吗?我的理解是否正确了示例应用的功能?
除了示例代码中的内容之外,当我在驾车时违反地理围栏时,是否需要执行任何操作以接收警报? 地理围栏监控是否与创建地理围栏分开,我在这里缺少什么?
非常感谢任何输入,我们非常渴望在我们的应用程序中使用它,但现在我们被卡住了。
谢谢, 托里。
答案 0 :(得分:10)
首先,您对应用程序功能的理解是正确的。每当您进入/离开其中一个地理围栏时,它会在通知中向您显示(它总是更新相同的通知顺序,所以请留意它,否则您可能会错过其中一个事件)。
其次,请注意,因为Geofence 1默认只触发 ENTER 事件。因此,如果您在内部后离开该地理围栏区域,您将无法收到通知!您可以在MainActivity.java上创建mUIGeofence1对象时更改此行为。
最后,与所有与位置相关的事情一样,这个API并不完美..从我的测试到目前为止我从未见过它启动GPS,所以当它外面它几乎似乎依赖于网络位置,这可以即使你站在正中间,也不会落在500米半径的地理围栏内。在IO的一次演示中,Reto Meier提到API将足够聪明以尽可能最好地处理电池消耗,因此当用户开始接近地理围栏时它只会打开GPS - 这是有道理的 - 但这似乎永远不会发生。
答案 1 :(得分:2)
API永远不会“打开”GPS。你必须自己启动GPS。
答案 2 :(得分:1)
还要确保将半径设置得足够大。我只是想知道它是否有效。我还在玩它,但这里的示例代码工作正常:
答案 3 :(得分:0)
我尝试了GeofenceDetection示例代码,它正在运行。 我只使用Wifi和GPS,并将我的半径设置为15米。 当我走到该地区时,它不会立即显示通知。 几秒钟后,我收到了“输入”通知。 此外,即使我站在该地区,有时我也会得到通知 我正在退出该地区。它让应用程序感觉它像是在一个地区内外跳来跳去。
答案 4 :(得分:0)
我编写了一个同时使用Google Play服务位置和Geofence API的测试应用。我使用位置API以1秒的速率获取当前位置。当我设置地理围栏时,我显示了从当前位置到地理围栏中心的距离,每当位置更新时都会更新。
在地理围栏设置完成后,我得到了入口事件。我清除了那个事件,然后在地理围栏范围外散步。显示的距离像疯了似的。该职位花了大约三分钟才赶上我。在回家的路上发生了类似的滞后。
可惜游戏服务是封闭源代码,我很想了解其算法的局限性。
答案 5 :(得分:0)
最初我的想法是一样的。这是因为半径是米,我认为它将在KMS / Miles中。所以我输入了很小的值。经过几次实验,我发现了。输入更大的价值,它就像我的Nexus 5上的魅力一样