2011-01-20 9 views
8

jestem tring aby korzystać z GPS na emulatorze android, mam następujący kod:Android - Nie można uzyskać lokalizacji GPS na emulatorze

public class NL extends Activity { 

private LocationManager locmgr = null; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nl); 

     locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     Criteria crit = new Criteria(); 
     crit.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locmgr.getBestProvider(crit, true); 
     Location loc = locmgr.getLastKnownLocation(provider); 


     Toast msg = Toast.makeText(this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
     msg.show(); 
    } 
} 

Dodałem następujący wiersz w manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

a ja ustawić lokalizację GPS z metodą DDMS i albo metodą fix geo, ale gdy uruchamiam kod, otrzymuję NullPointerExeption przy linii tosty, prawdopodobnie przyczyną loc jest null .

Nie rozumiem, gdzie jest błąd ... możesz mi pomóc?


AKTUALIZACJA!

Dziękuję za pomoc, teraz używam poniższego kodu i nie dostaję żadnego błędu, ale nie uruchamia on kodu wewnątrz naChangeLocation ... nie uruchamia toastu i nie zwraca żadnych wiadomość w logu!

public class NL extends Activity { 

     private LocationManager locmgr = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.nl); 

      locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // Define a listener that responds to location updates 
      LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location loc) { 
        // Called when a new location is found by the network location provider. 
        Log.i("NOTIFICATION","onLocationChenged Triggered"); 

        Toast msg = Toast.makeText(NetworkLocator.this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
        msg.show(); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {} 

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
       }; 

      // Register the listener with the Location Manager to receive location updates 
      locmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     } 
    } 

Dzięki!

+2

pan sprawdzić, czy rzeczywiście * * locmgr.getBestProvider powraca "GPS"? tak czy inaczej, powinieneś zdecydowanie zaimplementować * LocationListener * i przekazać go do LocationManager z * requestLocationUpdates() * –

+0

zwrotem "gps" getBestProvider. Czy muszę dodać listę lokalizacji, nawet jeśli próbuję uzyskać lokalizację z lastKnownLocation? dziękuję za pomoc –

+0

@Marco Faion Proszę zachować odpowiedzi na aktualne pytania ... Odpowiedziałem już raz, a ty nie wyraziłeś żadnej opinii na temat odpowiedzi! > 'http: // stackoverflow.com/questions/4591765/android-sqlite-database-method-undefined-fot-type/4591843 # 4591843' – Beasly

Odpowiedz

7

znalazł rozwiązanie:

LocationManager.NETWORK_PROVIDER jest źle.

korekta: LocationManager.GPS_PROVIDER

+1

Z mojego doświadczenia wynika, że ​​emulator nie reaguje na zmiany lokalizacji wysyłane za pośrednictwem DDMS, gdy dostawca jest ustawiony na NETWORK_PROVIDER, ale gdy zostanie ustawiony na GPS_PROVIDER, jak zauważyłeś. Wygląda to jak al imitacja w emulatorze, a przynajmniej zachowanie, które nie jest oczywiste. – Mick

1

Jeśli wszystko co opisałeś odbywa niż może nie jesteś prawdopodobnie nie ur GPS jest włączony w emulator.go do ustawiania: -> Lokalizacja i bezpieczeństwo: -> i użyj satelitów GPS musi być sprawdzone


edytowane: ithink musisz użyć menedżera lokalizacji bez typu kryteriów.



LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

loc=mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

------ niż postarać się długo. i lat.

+0

"Używaj satelitów GPS" jest zaznaczone –

0

Czy jesteś pewien, że Twoje urządzenie emulowane obsługuje GPS? myślę, że był dodatkową opcją dla tego ...

To może pomóc też:

Dzięki! Dla wszystkich: Możesz zmienić cel budowy dla swojego projektu w dowolnym momencie w Eclipse: Kliknij prawym przyciskiem myszy projekt w Eksploratorze pakietów, wybierz Właściwości> Android, a następnie zaznacz "Google API" dla Project Target. - Programiści pracujący z ustawieniami kultury nieanglojęzycznej mogą zauważyć, że naciśnięcie przycisku Wyślij w opcji Kontrola lokalizacji nie wysyła nowej lokalizacji do emulatora Androida. Zostało to naprawione w nadchodzącym wydaniu 7 narzędzi SDK; dla szybkiej poprawki możesz zmienić swoje ustawienia na "en". (Patrz code.google.com/p/android/issues/detail?id=915 szczegóły.) - Patrick de Kleijn

źródło: GPS on emulator doesn't get the geo fix - Android

8

Emulator po prostu nie ma żadnego lokalizacją u początek. Zgodnie z doc, metoda "getLastKnownLocation" może zwrócić null, więc jest w porządku. W takim przypadku należy poczekać na aktualizacje lokalizacji (można użyć metody requestLocationUpdates użytkownika z LocationManager).Można wywołać aktualizację lokalizacji na moduł GPS emulatora według następującego polecenia:

adb -e emu geo fix 50 50 
Powiązane problemy