如何提高Android geofence进入/退出通知的一致性?

我正在使用内置的地理栅栏API(播放服务),并有混合的结果。 它看起来像设置了地理围栏后,即使GPS打开,进入/退出的通知也是非常不一致的(最新的位置(连接LocationClient,在后台运行)。我开始监视(轮询)位置更改和debugging文本字段中的距离,并且看到,即使基于设备注册的位置和地理围栏的位置,我在技术上位于地理围栏的内部/外部,通知有时会被触发,有时甚至不会。 任何方式使这更可预测? 我几乎想要放弃这个API,并根据设备位置的轮询执行我自己的(电池耗尽)地理栅栏。

Solutions Collecting From Web of "如何提高Android geofence进入/退出通知的一致性?"

几点build议:

  1. 确保你使用的是BroadcastReceiver而不是服务来接收转换,否则如果你的应用被杀死/closures,你将不会/不会得到它。 正如这里所讨论的: Android Geofence最终会停止获得转换意图

  2. 确保在重新启动设备后重新创build地理位置,最好使用启动广播接收器。 正如这里所讨论的: 设备重启后,Geofences在android中是否保持活动状态

  3. 另外一个常见的误解是,由于它不同于IOS,所以我不得不立即为新创build的地理围栏获取触发器,如果​​设备在创build地理围栏时发现它是在地理围栏内的话。 我已经使用新创build的geofences的“宽限期”自己解决了这个问题,我在这个线程中解释了这个问题: addProximityAlert不能正常工作

最后一件重要的事情是: 如果你遵循上面的要点,把你的LocationClient连接到你的应用程序或者根本不需要关注。 我的代码中添加或删除Geofences的过程基本上是:

  1. 创build并连接位置客户端。

  2. 在connect-callback中,添加/删除geofence(s)

  3. 在geofence-resultcallback中,断开locationclient。

每次发生这种情况时,我的位置客户端只能连接几秒钟。 操作系统仍然会产生地理围栏警报,并在发生的时候给我的BroadcastReceiver打电话。

如果你做这些事情,我敢打赌,你的经验将会改善。

希望这可以帮助!