我刚刚完成Android上的地理围栏教程(http://developer.android.com/training/location/geofencing.html),我想知道为什么地理围栏的'回调'是通过待处理的意图完成而不是简单的回调接口。
如果在活动中实施,通常会在onPause()
中断开位置客户端,因此在应用程序暂停/被销毁后,以前添加的地理围栏也不会被跟踪,那么为什么还有待处理的意图呢?或者我错了?
答案 0 :(得分:18)
我想知道为什么geofences的'回调'是通过挂起的意图而不是简单的回调接口完成的。
主要是因为即使没有运行应用程序,地理围栏也可以正常运行。
如果在活动中实现,通常会断开onPause()中的位置客户端,因此在应用程序暂停/被销毁后,以前添加的地理围栏也不会被跟踪,那么为什么会有未决的意图呢?或者我错了?
我相信你错了。实际上,地理围栏专门不是为直接触发UI而设计的,如the documentation中所述:
从位置服务发送的Intent可以在您的应用中触发各种操作,但您不应该让它启动活动或片段,因为组件只应在响应用户操作时变得可见。
现在,您可以选择说您只想在前台活动时使用地理围栏。但是,您必须在onPause()
中删除这些地理围栏。地理围栏将在到期时间之前保持注册状态或手动删除,AFAICT。
答案 1 :(得分:1)
这个答案可能已经过时 - 谷歌播放服务的准确性和可靠性已经从它的初始版本发生了很大变化。
我的一些地理围栏经验如下。 首先 - 这项技术的主要优点是电池使用率非常低。事实上,我注意到电池寿命没有任何变化。这真的令人印象深刻。 服务似乎只使用Wi-Fi和网络位置。我根本没有注意到GPS运行。我不能说它是否只是隐藏的位置图标或者真的没有使用GPS。 准确性 - 这太可怕了。除了我的家庭ap的范围之外,根本没有检测到20个圆圈区域。它看起来像整个位置圈,包括错误必须在围栏区域内。有时会检测到1000米区域并且具有巨大的延迟。那些在开放区域进行的实验,其中Wi-Fi数量非常少。我仍然试图找到真正可靠的设置来完成这项服务。在获得意图后,我想打开GPS位置并在我自己的代码中进行最终处理。