我正在使用内置的geofence API(播放服务),并且结果参差不齐。设置地理围栏后,即使GPS处于打开状态且具有最新位置(LocationClient已连接,在后台运行),进入/退出的通知也非常不一致。我开始监视(轮询)位置变化并调试文本字段中的距离,发现即使从设备注册的位置和地理围栏的位置来看,从技术上讲我在地理围栏的内部/外部,有时也会触发通知,而有时不会触发通知。有什么办法可以使这个更可预测?我几乎想放弃此api,而是根据对设备位置的轮询来实现自己的(电池耗尽)地理围栏。

最佳答案

一些建议:

  • 确保您使用的是BroadcastReceiver而不是Service来接收转换,否则,如果您的应用被终止/关闭,您将不会/可能无法获得它。如此处所述:
    Android Geofence eventually stop getting transition intents
  • 确保重启设备后,最好使用引导广播接收器来重新创建地理围栏。如此处所述:
    Do Geofences remain active in android after a device reboot
  • 另一个常见的误解是令我感到困惑的,因为它与IOS不同,那就是,如果设备在创建地理围栏时发现您位于地理围栏内,那么您将始终立即获得该触发器。我自己对新创建的地理围栏使用“宽限期”解决了这个问题,我在以下主题中对此进行了解释:
    addProximityAlert doesn't work as expected

  • 最后一件重要的事情:如果您遵循上述要点,那么根本不重要,将LocationClient连接到您的应用程序中也没有关系。我在代码中添加或删除Geofence的过程基本上是:
  • 创建并连接locationclient。
  • 在connect-callback中,添加/删除地理围栏
  • 在地理围栏结果回调中,断开locationclient。

  • 每次发生这种情况时,我的位置客户端总共仅连接几秒钟。操作系统仍然会生成地理围栏警报,并在发生任何情况时调用我的BroadcastReceiver。

    如果您做这些事情,我敢打赌,您的体验会有所改善。

    希望这可以帮助!

    08-05 19:36