2014-03-12 103 views
0

我正在开发一个android应用程序,其中我需要更频繁地进行用户位置更新。一分钟说两次。Android位置更新卡住

此前我一直在使用Google Play服务的“融合位置服务”,但位置更新未按要求收到。 位置更新卡住了一段时间,更新间隔跳到了10分钟左右。有时,即使我把优先级设置为“PRIORITY_HIGH_ACCURACY”,也是如此。

然后我回到了旧的“位置管理器”,当我使用“NETWORK_PROVIDER”时,我注意到由于这个提供者,位置更新卡住了。此外,GPS不会立即启动,需要一些时间。我正在尝试构建自定义融合位置提供程序。如何在提供商之间高效切换,而不会在位置更新上滞后。

我想知道什么是定期获取位置更新的最佳实践,无论是NW,GPS还是两者。就像它应该适用于无法提供位置更新卡住的应用程序。

电池耗尽对我来说现在不是问题。我知道Google提供的关于位置访问的所有支持文档。

任何帮助将不胜感激。

谢谢!

回答

1

FusedLocationProvider确实是获取位置的最佳选择,因为它使用的不仅仅是GPS或网络数据来获取位置修正。我也遇到过有关错过时间间隔的问题,但最终这是根据GPS,网络等的可用性而下降的。

到目前为止,我最喜欢的FusedLocationProvider用法与AlarmManager类一起使用:基本上,这个想法是以报警管理器指定的时间间隔开始定位跟踪(这可以设置为每隔30秒,例如您的情况)。一旦间隔被击中,位置提供者将尽快获得位置修正(因此在setInterval方法中或者它所调用的任何参数都是0)。通过这种方式,您可以避免必须等待另外30秒才能获得新位置,而不必让位置跟踪器在由Alarm Manager指定的时间间隔后尽快提供位置。

顺便说一句,在制作自定义位置跟踪包装器时,请小心使用.getLastKnownLocation()方法,因为它只使用缓存的位置 - 您最终可能每隔30秒向用户发送一次相同的位置。

祝你好运!

+0

FusedLocationProvider除NW/GPS外还使用了什么?你可以点亮它吗?据我所知,它使用GPS,NW和一个'被动提供者'来监听由其他应用程序触发的位置更新。是的,我正在使用基于报警管理器的方法,如您所提及的 – geekoraul

+0

它还使用了celltower数据以及内部传感器来帮助提供更准确的位置。 我想*技术上*通过旧的LocationManager类的NETWORK_PROVIDER选项也应该使用celltower数据 - 但实际上,由于读取精度较低,更新不会像定期发生一样,并且缺乏Wi-Fi/3G真的让它失望。 – SJunejo

+0

根据LocationManager类的NETWORK_PROVIDER的文档“此提供程序根据可用的小区塔和WiFi接入点确定位置,结果通过网络查找获取”。它使用所有的N/W来源。在FusedLocationProvider中,如果您有wifi,并且您离开了无线网络NW,则位置更新会卡住。而如果您仅使用LocationManager和NW提供商进行更新,它不会卡住 – geekoraul