2013-07-25 6 views
5

Ci scusiamo per il mio inglese. Sto cercando di ottenere una singola posizione dal GPS per inserire le variabili globali latitudine, longitudine. Il GPS si accende, ma l'attività continua prima che i dati vengano recuperati dal GPS.È necessario che l'attività di Android attenda fino al raggiungimento della posizione GPS

Le mie esigenze in altre parole ... il metodo getCurrentLocation() deve terminare solo se è stata trovata una posizione e sono state riempite le variabili di longitudine e latitudine, quindi è possibile utilizzarle in un altro metodo. So che ... l'utente deve aspettare ... risolverò questo in avanti mostrando qualcosa sullo schermo. Cosa devo fare? Grazie

Penso che sto saltando smettere di ascoltare il GPS in qualche posto. Dove è meglio?

Codice segue:

//Method to retrieve coordinates 
public void getCurrentLocation() { 
    //Use GPS if possible 
    if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     //assign Listener to GPS 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); 
     Toast.makeText(this, LocationManager.GPS_PROVIDER, Toast.LENGTH_SHORT).show(); 
    } 
    else if(manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){//toherwise, use NETWORK 
     //assign Listener to NETWORK 
     manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); 
     Toast.makeText(this, LocationManager.NETWORK_PROVIDER, Toast.LENGTH_SHORT).show(); 
    } 
} 

//Class to store the location recived in two variables 
final class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location location) { 
     //coordinates storing 
     latitude = String.valueOf(location.getLatitude()); 
     longitude = String.valueOf(location.getLongitude()); 
     Toast.makeText(getApplicationContext(), latitude + longitude, Toast.LENGTH_LONG).show(); 
    } 

    @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 
    } 
} 

risposta

1

Se si desidera l'attività Android di aspettare fino a ottenere la posizione GPS, si potrebbe tentare di utilizzare AsyncTask per questo. Vedi Android find GPS location once, show loading dialog per le risposte. Fondamentalmente in onPreExecute è possibile avviare la finestra di dialogo (inizia prima che venga chiamato lo doInBackground). Significa che stai aspettando il momento in cui puoi posizionare e mostrare la finestra di dialogo. Quindi in doInBackground puoi ottenere la posizione. Al termine viene chiamato onPostExecute. È possibile interrompere è da dentro onPostExecute. È possibile controllare se la posizione non è nulla e quindi chiamare un'altra funzione dall'interno di onPostExecute anche se si desidera.

Questo potrebbe essere un modo. È possibile imparare un esempio di base da AsyncTask Android example. È anche possibile iniziare leggendo la documentazione here.

Alcuni altri simili utile domande:

Wait for current location - GPS - Android Dev

getting location instantly in android

Spero che questo aiuti.