Я пытаюсь получить адреса из двух разных провайдеров: сети и GPS.requestLocationUpdates генерирует местоположение в неподходящее время
Я использую minTime 1 минута и minDistance 300 метров в requestLocationUpdates
. С этими параметрами я не ожидаю когда-либо получать больше одного обновления за минуту (за поставщика). Проблема в том, что я получаю обновления чаще, чем это (более 1 в минуту). Зачем?
Вот код, чтобы продемонстрировать:
mLocationManager.removeUpdates(listener);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TEN_SECONDS*6, TEN_METERS*30, listener);
if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TEN_SECONDS*6, TEN_METERS*30, listener);
Вот слушатель:
private final LocationListener listener = new LocationListener()
{
@Override
public void onLocationChanged(Location location)
{
if(location.getProvider().equals(LocationManager.NETWORK_PROVIDER))
updateUILocation(location,LocationService.this.gpsLocation);
else
updateUILocation(LocationService.this.networkLocation, location);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
UpdateUILocation:
private void updateUILocation(Location networkLocation,Location gpsLocation)
{
Location location = null;
if(gpsLocation == null || gpsLocation.getAccuracy() > 800)
{
if(!(networkLocation == null || networkLocation.getAccuracy() > 800))
location = networkLocation;
}
else
if(networkLocation == null)
{
if(gpsLocation.getAccuracy() < 800)
location = gpsLocation;
}
else
if(gpsLocation.getAccuracy() < networkLocation.getAccuracy() && gpsLocation.getAccuracy() < 500)
location = gpsLocation;
else
if(networkLocation.getAccuracy() < 800)
location = networkLocation;
if(location!=null)
{
if (mGeocoderAvailable)
doReverseGeocoding(location);
}
// Bypass reverse-geocoding only if the Geocoder service is available on the device.
}
doReverseGeocoding превратить место в текст и вызвать обработчик :
mHandler = new Handler()
{
public void handleMessage(Message msg)
{
if(msg.what == UPDATE_ADDRESS) // msg.what == 1
{
LocationService.this.address = (String) msg.obj;
new SendLocation(LocationService.this.id,(String)msg.obj); //send the location to the db
LocationService.this.gpsLocation = null; //reset gps value
LocationService.this.networkLocation = null; //reset network value
}
}
};
Я тестировал это приложение во время вождения (это означает, что параметр minDistance не является фактором), и я получил более одного обновления местоположения в минуту.
Вот место, которые я получил во время тестирования (не обращайте внимания на места, так как это в древнееврейском, просто посмотрите на то время): http://imrip.interhost.co.il/
Спасибо большое !!! –