1

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

我设置requestLocationUpdates如下

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

每当我收到更新时,onLocationChanged我都会通过网络广播该位置。

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

所以我不知道如何以适当的及时方式同步此过程,例如每 15 秒后,该位置将通过网络广播,而不是过于频繁地启动它

4

2 回答 2

1

locationManager.requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)

minTime 是位置更新之间的最小时间间隔,以毫秒为单位

minDistance 是位置更新之间的最小距离,以米为单位

您将 minTime 设置为 15 秒,但由于您的 minDistance 为 0 米,因此触发过于频繁。由于 GPS 值的微小变化会触发位置更新,因此无需等待 15 秒即可通过。提供一些米(例如 1 或 3)将增加更新之间的间隔。

于 2012-12-06T15:36:46.430 回答
1

onLocationChanged被调用的频率如何?

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

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

那么只有在 minTime 之后才会通知侦听器。

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

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

  • locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, geoHandler)
  • onLocationChanged只需检查您上次发送/处理您的位置的时间,如果经过的时间> = 15秒,则广播它;

希望它可以帮助你。

于 2012-12-06T15:08:55.600 回答