2013-07-25 10 views
5

Entschuldigung für mein Englisch. Ich versuche, einen einzigen Ort von GPS zu bekommen, um globale Variablen Breite, Länge zu setzen. GPS wird eingeschaltet, aber die Aktivität wird fortgesetzt, bevor Daten vom GPS abgerufen werden.Need Android Aktivität warten, bis GPS-Standort erhalten

Meine Bedürfnisse mit anderen Worten ... Methode getCurrentLocation() muss nur abgeschlossen werden, wenn ein Ort gefunden wurde und die Längen- und Breitengradvariablen gefüllt sind, also könnte ich sie in einer anderen Methode verwenden. Ich weiß ... Benutzer muss warten ... Ich werde das nach vorne lösen etwas auf dem Bildschirm zeigen. Was soll ich tun? Danke

Ich denke, ich höre auf zu hören GPS an einem bestimmten Ort. Wo ist es besser?

-Code folgt:

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

Antwort

1

Wenn Sie android Aktivität wollen warten, bis GPS-Position erhalten, Sie könnten versuchen, AsyncTask dafür zu verwenden. Siehe Android find GPS location once, show loading dialog für die Antworten. Grundsätzlich in onPreExecute können Sie den Dialog starten (es beginnt vor dem doInBackground aufgerufen wird). Es bedeutet, dass Sie bis zu dem Zeitpunkt warten, an dem Sie den Dialog anzeigen und anzeigen können. Dann in doInBackground können Sie den Standort erhalten. Danach wird onPostExecute aufgerufen. Sie können aufhören, ist von innen onPostExecute. Sie können überprüfen, ob der Standort nicht null ist und dann eine andere Funktion von innerhalb onPostExecute auch aufrufen, wenn Sie möchten.

Dies könnte ein Weg sein. Sie können ein grundlegendes Beispiel von AsyncTask Android example lernen. Sie können auch beginnen, indem Sie die Dokumentation here lesen.

Einige andere ähnliche hilfreiche Fragen:

Wait for current location - GPS - Android Dev

getting location instantly in android

Hoffnung, das hilft.