安卓 - 为什么要使用待处理意图来创建地理围栏?

7
我刚刚完成了 Android 上地理围栏的教程(http://developer.android.com/training/location/geofencing.html),我想知道为什么地理围栏的回调是通过挂起意图而不是简单的回调接口来完成的。
如果在活动中实现,通常会在 onPause() 中断开位置客户端,因此在应用程序暂停/被销毁后之前添加的地理围栏也不会被跟踪,那么为什么还需要挂起意图呢?或者我这里理解有误吗?
2个回答

18
我想知道为什么地理围栏的“回调”是通过挂起意图而不是简单的回调接口完成的。
主要是因为地理围栏的设计可以在您的应用程序未运行时工作。
如果在活动中实现,通常会在onPause()中断开位置客户端,因此即使应用程序暂停/被销毁后,以前添加的地理围栏也不会被跟踪,那么为什么需要挂起意图?或者我在这里错了吗?
我认为你在这里是错误的。实际上,正如文档所讨论的那样,地理围栏并不是为直接触发UI而设计的:
从位置服务发送的Intent可以触发应用程序中的各种操作,但是您不应该让它启动一个活动或片段,因为组件只应在响应用户操作时变为可见。
现在,您可能会选择说,您只想在前台使用地理围栏。但是,您必须在onPause()中删除这些地理围栏。据我所知,地理围栏将保持注册状态,直到其过期时间或手动删除。

是的,你说的完全正确 - 我刚试过了 :) - Flo
2
在我的测试中,Google的示例代码在我的应用程序被杀死后停止工作。因此,我改用广播接收器而不是IntentService,然后背景监视按预期工作。https://dev59.com/I2Ik5IYBdhLWcg3wMLiI#19521823 - b-ryce

1

这个答案可能已经过时了——Google Play服务的准确性和可靠性与最初发布时相比发生了很大变化。

以下是我对地理围栏的一些经验。 首先,这项技术的主要优点是非常低的电池使用量。事实上,我几乎没有注意到电池寿命有任何变化。这真的很令人印象深刻。 该服务似乎只使用Wi-Fi和网络位置。我完全没有注意到GPS在运行。我无法确定它是否只是隐藏的位置图标还是真的没有使用GPS。 准确性很差。除了我的家庭AP范围之内,20个圆形区域根本没有被检测到。看起来整个位置圆,包括误差,必须位于围栏区域内。1000米的区域有时会被检测到,并且具有巨大的延迟。这些实验是在周围Wi-Fi ap数量非常少的开放区域进行的。我仍在尝试找到真正可靠的设置。在获取意图后,我想打开GPS位置并在自己的代码中进行最终处理。


你有什么关于“巨大延迟”的经验吗? - Ewoks
“much smaller” 究竟是多小?1秒、1分钟还是1小时? - Ewoks
很难说“确切地”。我在家周围设置了一个半径为200米的地理围栏 - 当我步行接近围栏时,围栏总是被触发。我认为大多数情况下延迟不超过1分钟,但它可能因情况而异 - 我们必须记住这是首先设计为低功耗服务。 - piotrpo
1
我明白了。问题在于我的实现有些问题(我猜其他应用程序也是如此),因为有时候直到我解锁手机才会触发地理围栏,有时候则完全没有反应等等。你的应用程序是否开源?它至少在Play商店中可用吗?你是否使用了与开发者网站描述不同的实现方式?非常感谢。 - Ewoks
抱歉 - 一些商业应用程序 - 不管怎样 - 对于像“你在我们店附近”这样的任务来说已经足够好了。 - piotrpo
显示剩余2条评论

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