2010-08-06 16 views
5

Estoy a punto de crear una aplicación en Android que actuará como una tarjeta de entrada para los empleados en el camino.¿Cómo puedo obtener la ubicación actual de GPS?

Al comienzo de un trabajo, el usuario hará clic en un botón que registrará la ubicación del GPS y la hora actual (verificando que está donde debería estar en un momento dado) y otra vez al final del trabajo que registra la hora y la ubicación del GPS.

SO Creo que esto será bastante fácil, excepto que no puedo encontrar la forma de extraer los datos de ubicación actuales. Lo más cercano que puedo encontrar es onLocationChanged, lo que implica que no puedo obtener una lectura GPS estacionaria. Sé que tiene que ser posible hacer esto, pero no puedo encontrar un ejemplo práctico de cómo se lograría.

Respuesta

3

Después de un poco de investigación Esto es lo que ocurrió:

public class UseGps extends Activity 
{ 
    Button gps_button; 
    TextView gps_text; 
    LocationManager mlocManager; 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     gps_button = (Button) findViewById(R.id.GPSButton); 
     gps_text = (TextView) findViewById(R.id.GPSText); 

     gps_button.setOnClickListener(new OnClickListener() { 
      public void onClick(View viewParam) { 
       gps_text.append("\n\nSearching for current location. Please hold..."); 
       gps_button.setEnabled(false); 
       mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
       LocationListener mlocListener = new MyLocationListener(); 
       mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
      } 
     }); 
    } 

    /* Class My Location Listener */ 
    public class MyLocationListener implements LocationListener 
    { 
     @Override 
     public void onLocationChanged(Location loc) 
     { 
      double lon = loc.getLatitude(); 
      double lat = loc.getLongitude(); 
      gps_text.append("\nLongitude: "+lon+" - Latitude: "+lat); 
      UseGps.this.mlocManager.removeUpdates(this); 
      gps_button.setEnabled(true); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 
     } 
    } 
} 

Esto configura una actividad con un botón y TextView. Establezca un oyente en el botón que inicia el administrador de ubicación.

He creado una clase, MyLocationListener, que implementa LocationListener, y luego reemplazar el método onLocationChanged(), básicamente diciéndole que la primera ubicación se pone anexa a la Vista de Texto y luego se elimina el gestor de ubicación.

Gracias a los que ayudaron y espero que esto sea de utilidad para otra persona.

1

Usted debe tratar de android.location.LocationManager.getLastKnownLocation

y comprobar el tiempo de la ubicación devuelto usando Location.getTime(utc time).

+1

bien y disculpe mi ignorancia, pero lastKnownLocation dosnt implica mi ubicación actual en este momento .. Quiero que la aplicación obtenga mi ubicación tan pronto como presione el botón, ¿no es posible que la última ubicación conocida haya sucedido? Hace media hora, 2 millas atrás de la carretera? –

+0

y luego onLocationChanged es la mejor manera de obtener la posición más actualizada. – david

+0

Pero ese es mi punto, ¿y si estoy parado y quiero obtener el puesto en el que me encuentro actualmente? ¿Hay alguna forma de inicializar mi ubicación en, por ejemplo, 0 0, que luego desencadenaría un cambio de ubicación? –

0

Solicite actualizaciones de ubicación y cree un LocationListener (consulte LocationManager.requestLocationUpdates). Recibirá actualizaciones periódicas con información sobre la precisión.

Hasta que obtenga su primera actualización, puede (como se publicó) utilizar LocationManager.getLastLocation() y comprobar su marca de tiempo y precisión.

Palabra de advertencia: algunos dispositivos escanean para siempre y le permiten una lectura precisa, y es completamente aleatorio.

+0

ok, entonces algo así ... haga clic en el botón de inicio y obtengo una marca de tiempo, y básicamente continúo sondeando la última sesión conocida hasta que obtenga una ubicación con una marca de tiempo mayor que la marca de tiempo inicial ... Debo decir, No puedo creer que no haya una manera de hacer un control al azar. El dispositivo que estoy usando es bastante rápido para obtener mi ubicación cuando uso Google Maps o el navegador ... –

+0

¡No sondee la última vez! Mira por fin conocido una vez y solicita actualizaciones como se muestra arriba. Si cambia, serás notificado. Si no cambia, ¡lastKnown tampoco cambiará! – EboMike

+0

Ok, realmente no quiero parecer perezoso, pero aprendo mejor con el ejemplo, ¿en esa nota hay alguna forma en que usted (o alguien) pueda publicar algún código de muestra? –

Cuestiones relacionadas