【问题标题】:Android - Why use pending intents for geofencesAndroid - 为什么对地理围栏使用待定意图
【发布时间】:2013-05-19 02:36:36
【问题描述】:

我刚刚完成了 Android 上的地理围栏教程 (http://developer.android.com/training/location/geofencing.html),我想知道为什么地理围栏的“回调”是通过待定意图而不是简单的回调接口完成的。

如果在活动中实现,通常会断开onPause() 中的位置客户端,因此在应用程序暂停/被销毁后也不会跟踪先前添加的地理围栏,那么为什么要挂起意图?还是我在这里弄错了?

【问题讨论】:

    标签: android android-pendingintent geofencing


    【解决方案1】:

    我想知道为什么地理围栏的“回调”是通过待定意图而不是简单的回调接口完成的。

    主要是因为地理围栏设计为即使在您的应用程序不运行的情况下也能正常工作。

    如果在活动中实现,通常会在 onPause() 中断开位置客户端,因此在应用程序暂停/被销毁后也不会跟踪先前添加的地理围栏,那么为什么要挂起意图?还是我在这里弄错了?

    我相信你在这里弄错了。事实上,地理围栏并不是专门为直接触发 UI 而设计的,正如the documentation 中所讨论的那样:

    从定位服务发送的 Intent 可以在您的应用中触发各种操作,但您不应该让它启动 Activity 或片段,因为组件应该只在响应用户操作时才可见。

    现在,您可以选择说您只想在前台进行活动时使用地理围栏。但是,您必须删除 onPause() 中的这些地理围栏。地理围栏将保持注册状态直到其到期时间或手动删除,AFAICT。

    【讨论】:

    • 是的,你说的完全正确——我刚刚试了一下:)
    • 在我的测试中,如果我的应用程序被终止,来自 Google 的示例代码将停止工作。所以我切换到广播接收器而不是 IntentService,然后后台监控按预期工作。 stackoverflow.com/questions/19505614/…
    【解决方案2】:

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

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

    【讨论】:

    • 您的体验中的“巨大延迟”是什么样的??
    • 嗨 - 正如我在回答的注释中所写的那样 - 发生了很多变化 - 延迟要小得多。在典型的市区,它的效果非常好。
    • 究竟什么是“小得多”? 1 秒、1 分钟、1 小时?
    • 很难说“完全正确”。我在我家周围设置了半径 200m 的地理围栏 - 当我接近脚时,围栏总是被触发。我认为大多数情况下延迟不会超过 1 分钟,但根据情况可能会有很大差异——我们必须记住,这最初是为低功耗服务而设计的。
    • 我明白.. 问题是我的实现出了点问题(我猜还有其他一些应用程序),因为有时在我解锁手机之前不会触发地理围栏,有时不会完全发生等等。你的应用是开源的吗?它至少在Playstore中可用吗?您是否使用了与开发人员网站中描述的不同的实现? 10q
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2021-12-05
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多