2013-07-25 9 views
5

Przepraszamy za mój angielski. Próbuję uzyskać pojedynczą lokalizację z GPS, aby umieścić na globalnych zmiennych szerokość i długość geograficzną. GPS włącza się, ale aktywność jest kontynuowana, zanim dane zostaną pobrane z GPS.Potrzebujesz aktywności Androida, aby poczekać, aż uzyskano lokalizację GPS

Moje potrzeby innymi słowy ... metoda getCurrentLocation() musi kończyć się tylko wtedy, gdy zostanie znaleziona lokalizacja i zmienne długości i szerokości geograficznej są wypełnione, więc mógłbym użyć ich w innej metodzie. Wiem ... użytkownik musi poczekać ... Rozwiążę ten problem, pokazując coś na ekranie. Co mam zrobić? Dziękujemy

Myślę, że pomijam, przestań słuchać GPS w jakimś miejscu. Gdzie jest lepiej?

Kod następująco:

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

Odpowiedz

1

Jeśli chcesz aktywność android czekać aż uzyskano lokalizacji GPS, można spróbować użyć AsyncTask do tego. Aby uzyskać odpowiedzi, patrz Android find GPS location once, show loading dialog. Zasadniczo w onPreExecute możesz uruchomić okno dialogowe (zaczyna się przed wywołaniem doInBackground). Oznacza to, że czekasz do momentu, w którym możesz zlokalizować i wyświetlić okno dialogowe. Następnie w doInBackground możesz uzyskać lokalizację. Po tym kończy się wywołanie onPostExecute. Możesz się zatrzymać z wnętrza onPostExecute. Możesz sprawdzić, czy lokalizacja nie jest pusta, a następnie wywołać inną funkcję z wnętrza onPostExecute również, jeśli chcesz.

To może być jeden sposób. Możesz nauczyć się podstawowego przykładu z AsyncTask Android example. Możesz również zacząć od przeczytania dokumentacji here.

Niektóre inne podobne pomocna pytania:

Wait for current location - GPS - Android Dev

getting location instantly in android

Nadzieja to pomaga.

Powiązane problemy