需要同步onLocationChanged

时间:2012-12-06 14:56:03

标签: android google-maps android-service android-location

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

我已将requestLocationUpdates设置如下

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

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

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

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

2 个答案:

答案 0 :(得分:1)

调用onLocationChanged的频率是多少?

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

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

然后只有在minTime之后才会通知监听器。

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

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

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

希望它对你有所帮助。

答案 1 :(得分:1)

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

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

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

您将minTime设置为15秒,但由于您的minDistance为0米,因此触发过于频繁。它不需要等待15秒才能通过,因为GPS值的轻微变化会触发位置更新。给一些米(例如1或3)应增加更新之间的间隔。