如何提高Android地理围栏进入/退出通知的一致性?

ovi*_*roa 24 android android-maps-v2 android-geofence

我正在使用内置的地理围栏API(播放服务),并且结果好坏参半.看起来在设置地理围栏之后,即使GPS打开,进入/退出的通知也非常不一致,具有最新位置(连接了LocationClient,在后台运行.)我开始监控(轮询)位置变化和调试文本字段中的距离,并且即使基于设备注册的位置和地理围栏的位置(我在技术上是在地理围栏的内部/外部),通常有时会触发通知,有时也不会.有什么方法可以让它更具可预测性?我几乎想要放弃这个api并根据设备位置的轮询实现我自己的(电池耗尽)地理围栏.

Mat*_*ias 45

一些建议:

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

  2. 确保在重新启动设备后重新创建地理围栏,最好使用启动广播接收器.如下所述: 在设备重启后,Geofences在android中保持活动状态

  3. 另一个常见的误解,因为它与IOS不同而难以理解的是,如果设备在创建时发现你在地理围栏中,你将总是立即获得新创建的地理围栏的触发器.我已经使用新创建的地理围栏的"宽限期"解决了这个问题,我在这个帖子中解释过: addProximityAlert无法按预期工作

最后一件重要的事情:如果您遵循以上几点,在您的应用中连接您的LocationClient 应该无关紧要.我在代码中添加或删除Geofences的过程基本上是:

  1. 创建并连接locationclient.

  2. 在连接回调中,添加/删除地理围栏

  3. 在geofence-result回调中,断开locationclient.

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

如果你做这些事我敢打赌你的经历会有所改善.

希望这可以帮助!

  • 对不起,你还有问题.我很确定,你不需要连接的LocationClient来获得回调.locationclient是执行位置相关操作的"通道".我认为这是打电话.在我们的应用程序被销毁后,我的broadcastintent得到回调,并且在重新启动电话后无需实际启动我们的应用程序,所以我很确定它的工作原理.如果你看一下LocationClient的APIDocs,这基本上就是它所说的.希望你能成功合作! (2认同)