我正在创建一个应用程序,该应用程序通过Web广播用户的位置,为此我创建了一项服务,其中我正在使用LocationListener并从中获取更新
onLocationChanged

我将requestLocationUpdates设置如下

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
                                                15000,
                                                0,
                                                geoHandler);


每当我在onLocationChanged中获得更新时,我都会通过网络广播该位置。

现在的问题是,即使onLocationChanged没有超过时间限制(完全不可预测),它也会被频繁触发,这反过来又触发了我的自定义函数,该函数过于频繁地广播位置信息。

因此,我不知道如何以适当的及时方式同步此过程,例如每15秒就会通过网络广播该位置,而不是过于频繁地触发它

最佳答案

onLocationChanged被调用的频率如何?

这是一个奇怪的行为,因为当您将minTime!= 0参数添加到时:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minDistance, geoHandler)

那么仅在minTime之后才通知监听器。

经过更深入的研究,我发现minTime是相对的。它取决于许多因素,因此在minTime之后不会精确地调用onLocationChanged。 Google建议使用此参数来提高电源和电池效率。因此,您应该使用较大的值,例如1000 * 60 * 5(5分钟)。

如果确实需要每15秒广播一次您的位置,则应记住,GPS精确定位不能立即触发,这至少需要5到10秒(最佳情况)。因此,您必须将设计更改为以下内容:


locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0, 0, geoHandler)
onLocationChanged中,只需检查一下您上次发送/处理位置的时间是什么,并且如果经过的时间> = 15秒,则进行广播;


希望对您有帮助。

关于android - 需要同步onLocationChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13746250/

10-10 08:33