2011-01-23 15 views
8

che io chiamo il metodo e si aspettano posizione aggiorna più volte:posizione del gestore ha chiamato solo una volta

locationManager.requestLocationUpdates("gps",0 ,0, loc_listener); 

mio loc_listener è definito come:

LocationListener loc_listener = new LocationListener() { 
    private final String TAG = "xoxoxo.LocationListener"; 

    public void onLocationChanged(Location l) { 
     Intent locationAlert = new Intent("xoxoxo.LOCATION_CHANGED") 
       .putExtra("target_location", l); 
     sendBroadcast(locationAlert); 
     // locationManager.requestLocationUpdates("gps", 0 ,0, this); 
    } 

    public void onProviderEnabled(String p) { 
     Log.i(TAG, "Provider enabled"); 
    } 

    public void onProviderDisabled(String p) { 
     Log.i(TAG, "Provider disabled"); 
    } 

    public void onStatusChanged(String p, int status, Bundle extras) { 
     Log.i(TAG, "Status changed"); 
    } 
}; 

Definito come è, mi limito a ottenere un aggiornare una volta, sia su HTC Evo 2.2 e 2.2 + emulatore di Google API. L'hack per ottenere più aggiornamenti è quello di rimuovere il commento dalla linea che registra per gli aggiornamenti ad ogni aggiornamento:

locationManager.requestLocationUpdates("gps", 0 ,0, this); 

Avete ragazzi visto qualcosa di simile?

+1

È possibile utilizzare NETWORK_PROVIDER per ottenere la posizione veloce ... – Anand

+0

La mia applicazione richiede solo la posizione fine. Senza di esso, gran parte della funzionalità viene persa. –

+0

per provider di servizi GPS che richiedono condizioni di cielo aperto in modo che possa essere aggiornato molto rapidamente e con precisione, ma nel caso in cui si sia all'interno dell'edificio è necessario implementare il provider di rete per ottenere almeno una posizione aggiornata che sia meno accurata rispetto al GPS. – Anand

risposta

14

Non ho mai visto il problema. Quello che segue è il mio codice per testare LocationManager e LocationListener. Funziona come previsto quando LocationListener è implementato come una classe anonima.

package com.test.locationmanager; 

import android.app.Activity; 
import android.content.Context; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.location.LocationProvider; 
import android.os.Bundle; 
import android.widget.TextView; 

public class LocationManagerStatus extends Activity { 

    private LocationManager locationManager; 
    private TextView textView; 
    private final LocationListener gpsLocationListener =new LocationListener(){ 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      final String tvTxt = textView.getText().toString(); 
      switch (status) { 
      case LocationProvider.AVAILABLE: 
       textView.setText(tvTxt + "GPS available again\n"); 
       break; 
      case LocationProvider.OUT_OF_SERVICE: 
       textView.setText(tvTxt + "GPS out of service\n"); 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       textView.setText(tvTxt + "GPS temporarily unavailable\n"); 
       break; 
      } 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "GPS Provider Enabled\n"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "GPS Provider Disabled\n"); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      locationManager.removeUpdates(networkLocationListener); 
      textView.setText(textView.getText().toString() 
        + "New GPS location: " 
        + String.format("%9.6f", location.getLatitude()) + ", " 
        + String.format("%9.6f", location.getLongitude()) + "\n"); 
     } 
    }; 
    private final LocationListener networkLocationListener = 
                 new LocationListener(){ 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras){ 
      final String tvTxt = textView.getText().toString(); 
      switch (status) { 
      case LocationProvider.AVAILABLE: 
       textView.setText(tvTxt + "Network location available again\n"); 
       break; 
      case LocationProvider.OUT_OF_SERVICE: 
       textView.setText(tvTxt + "Network location out of service\n"); 
       break; 
      case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       textView.setText(tvTxt 
         + "Network location temporarily unavailable\n"); 
       break; 
      } 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "Network Provider Enabled\n"); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      textView.setText(textView.getText().toString() 
        + "Network Provider Disabled\n"); 
     } 

     @Override 
     public void onLocationChanged(Location location) { 
      textView.setText(textView.getText().toString() 
        + "New network location: " 
        + String.format("%9.6f", location.getLatitude()) + ", " 
        + String.format("%9.6f", location.getLongitude()) + "\n"); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     textView = (TextView) findViewById(R.id.textview); 
     locationManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(
       LocationManager.NETWORK_PROVIDER, 5000, 0, 
       networkLocationListener); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
       3000, 0, gpsLocationListener); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(networkLocationListener); 
     locationManager.removeUpdates(gpsLocationListener); 
    } 
} 
+1

Grazie per questo snippet, funziona come un fascino! – Johan

Problemi correlati