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