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

如何提高Android geofence进入/退出通知的一致性?,android,android-maps-v2,android-geofence,Android,Android Maps V2,Android Geofence,我正在使用内置的geofence API(play services),结果好坏参半。设置地理围栏后,进入/退出的通知看起来非常不一致,即使GPS处于打开状态,并且位置是最新的(LocationClient已连接,在后台运行)。我开始在调试文本字段中监视(轮询)位置更改和距离,并看到,即使基于设备注册的位置和地理围栏的位置,我在地理围栏的内部/外部,通知有时会触发,有时不会。有没有办法让这更容易预测?我几乎想放弃这个api,基于设备位置轮询实现我自己的(电池耗尽)地理围栏。有几点建议: 确保您使

我正在使用内置的geofence API(play services),结果好坏参半。设置地理围栏后,进入/退出的通知看起来非常不一致,即使GPS处于打开状态,并且位置是最新的(LocationClient已连接,在后台运行)。我开始在调试文本字段中监视(轮询)位置更改和距离,并看到,即使基于设备注册的位置和地理围栏的位置,我在地理围栏的内部/外部,通知有时会触发,有时不会。有没有办法让这更容易预测?我几乎想放弃这个api,基于设备位置轮询实现我自己的(电池耗尽)地理围栏。

有几点建议:

  • 确保您使用的是BroadcastReceiver,而不是服务来接收转换,否则,如果您的应用程序被关闭/关闭,您将无法接收到转换。正如这里所讨论的:

  • 确保在设备重新启动后重新创建GeoFence,最好使用引导广播接收器。正如这里所讨论的:

  • 另一个常见的误解是,如果设备在创建地理围栏时发现您在地理围栏内,您总是会立即触发新创建的地理围栏,这一误解让我感到困惑,因为它与IOS不同。我自己通过对新创建的地理围栏使用“宽限期”解决了这一问题,我在本帖中对此进行了解释:

  • 最后一点很重要:如果您遵循上述要点,那么在应用程序中连接您的LocationClient与否应该无关紧要。我在代码中添加或删除地理围栏的过程基本上是:

  • 创建并连接locationclient

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

  • 在geofence结果回调中,断开locationclient

  • 每次发生这种情况时,我的location客户端总共只连接几秒钟。操作系统仍将生成地理围栏警报,并随时调用我的广播接收器

    如果你做这些事情,我打赌你的经验会有所提高


    希望这有帮助

    我试试看#2和#3不适用于我的项目,尽管它是非常有用的信息。另外,很高兴知道LocationClient与此无关,因为我花了一些精力使其保持热状态,并定期运行位置更新。消除这些肯定会使应用程序更轻,电池/资源效率更高。很棒的东西,很高兴我能帮上忙!不幸的是,在进行了建议的更新之后,没有任何改进。此外,这句话“如果您遵循上述要点,是否在应用程序中连接了LocationClient根本不重要。”似乎并不准确,因为在某些情况下,当客户端断开连接时,我不会收到任何通知,但一旦我连接,它们就会开始进入。所有这些都是非常令人沮丧的,因为我的项目的重要特性依赖于一些应该在纸上工作的东西,但实际上失败得很惨。很抱歉,您仍然有问题。不过我很确定,您不需要连接LocationClient来获取回调。locationclient是执行位置相关操作的“通道”。我把它看作是打电话。我的broadcastintent在我们的应用程序被破坏后,在手机重新启动而不需要实际启动我们的应用程序后得到回调,所以我很确定它能工作。如果你看一下APIDocs for LocationClient,它基本上也是这么说的。希望你能解决,伙计!利昂,是的,我已经在答案里写了。“如果设备在创建地理围栏时发现您在地理围栏内”