2013-01-14 12 views
5

Próbuję najpierw wygenerować lokalizację za pośrednictwem dostawcy GPS, jeśli otrzymam wartość null generowaną przez operatora sieci. Mój problem polega na tym, że dostawca sieci dwa razy generuje tę samą lokalizację. Wysyłam informacje do bazy danych i wysyła tę samą lokalizację w tym samym czasie (te same sekundy!). Oto kod:Dostawca sieci generuje 2 kopie lokalizacji

gpsLocation = requestUpdatesFromProvider(LocationManager.GPS_PROVIDER, R.string.not_support_gps); 
networkLocation = requestUpdatesFromProvider(LocationManager.NETWORK_PROVIDER, R.string.not_support_gps); 
    // Update the UI immediately if a location is obtained. 
if (gpsLocation != null) 
    updateUILocation(gpsLocation); 
else 
    updateUILocation(networkLocation); 

Oto requestUpdateFromProvider:

private Location requestUpdatesFromProvider(final String provider, final int errorResId) 
{ 
    Location location = null; 
    if (mLocationManager.isProviderEnabled(provider)) 
    { 
     mLocationManager.requestLocationUpdates(provider, TEN_SECONDS, TEN_METERS*2, listener); 
     location = mLocationManager.getLastKnownLocation(provider); 
    } 
    else 
    { 
     Toast.makeText(this, errorResId, Toast.LENGTH_LONG).show(); 
    } 
    return location; 
} 

Oto updateUILocation:

private void updateUILocation(Location location) 
{ 
    // We're sending the update to a handler which then updates the UI with the new location. 
    Message.obtain(mHandler, 
      UPDATE_LATLNG, 
      location.getLatitude() + ", " + location.getLongitude()).sendToTarget(); 

    // Bypass reverse-geocoding only if the Geocoder service is available on the device. 
    if (mGeocoderAvailable) 
     doReverseGeocoding(location); 
} 

Oto obsługi:

mHandler = new Handler() 
    { 
     public void handleMessage(Message msg) 
     { 
      if(msg.what == UPDATE_ADDRESS) //UPDATE_ADDRESS = 1 
      { 
       LocationService.this.address = (String) msg.obj; // update a string that show the user address 
       new SendLocation(LocationService.this.id,(String)msg.obj);//send the info to the db. 
      } 
     } 
    }; 

SendLocation robi to, co powinien zrobić poprawnie, więc nie powinieneś zwracać na to uwagi.

EDIT

Zapomniałem powiedzieć, że pierwszy kawałek kodu jest metoda zwana od konstruktora.

Odpowiedz

0

Jeśli to nie twoja wina, że ​​tworzone są duplikaty lokalizacji, po prostu zadzwoń do zsynchronizowanej metody forwardLocation(Location loc), która zapisuje znacznik czasu ostatniej otrzymanej lokalizacji. Ta metoda powinna zignorować lokalizację, gdy jej ostatni zapisany znacznik czasu jest równy poprzednio.