2013-01-19 4 views
1

Я пытаюсь получить адреса из двух разных провайдеров: сети и 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/

ответ

2

«minTime 1 минута и minDistance составляет 300 метра С. те параметры, которые я никогда не должен получить 2 места в менее чем 1 минуту ...»

Это просто не соответствует действительности, предварительно не Jellybean в любом случае.

http://developer.android.com/reference/android/location/LocationManager.html

До Jellybean, параметр minTime был лишь намек, и некоторые реализации провайдеров местонахождения проигнорировала. Начиная с Jellybean и далее для Android-совместимых устройств обязательно соблюдать параметры minTime и minDistance.

Pre-JB вы можете получать обновления БОЛЕЕ ЧРЕЗВЫЧАЙНО, чем указывает ваше минимальное время, особенно если прием GPS является отрывочным. Смотрите этот ответ для более подробной информации:

requestLocationUpdates interval in Android

+0

Спасибо большое !!! –

Смежные вопросы