# Hat der AVD-Manager Probleme mit GPS?



## Skad (8. Okt 2012)

Hallo,

ich schreibe momentan paar Android-Apps und bisher haben alle funktioniert.
Nun wollte ich eine App schreiben, die GPS-Daten auslesen soll. Nachdem die App nicht gestartet wurde, habe ich Code-Teile ein und auskommentiert und mir ist aufgefallen, dass die App auf Grund der Methoden getLongitude(); und getLatitude(); nicht funktioniert. 
Ich habe leider kein Android Telefon, deshalb benutze ich den AVD-Manager in eclipse. In meinem Virtual Device habe ich den GPS support auch aktiviert.

Mir hat vor paar Tagen jemand gesagt, dass der AVD-Manager Probleme mit GPS hat. Irgendwie kann ich mir das aber nicht vorstellen, da man ja "GPS support" aktivieren kann. Trotzdem ist es auffällig, dass die App abbricht, wenn die zwei oben genannten Methoden aufgerufen werden.

Nun wollte ich nochmal nachfragen, ob der AVD-Manager Probleme mit GPS hat? 
Oder muss ich irgendwas am Lap-Top einstellen, dass dieser auch GPS handeln kann?

___________________________

Hier mal der relevante Code-Teil, vielleicht habe ich auch etwas übersehen:

Die Deklarationen kommen direkt am Anfang der Activity-Klasse:

```
LocationManager locationManager;
Location loc;
double longi = 0.0 ;
double lati = 0.0 ;
String longiText, latiText;

//....
//....

TextView lo = null;
TextView la = null;
```

Im public void onCreate(Bundle savedInstanceState) Block:

```
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

//....
//....

locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,2000,100, locationListener);
```

Im setOnClickListener(new View.OnClickListener() 
		{
			public void onClick(View v) { Block:

```
loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
longi = loc.getLongitude();			
lati = loc.getLatitude(); 

longiText = Double.toString(longi);
latiText = Double.toString(lati);
								
lo.setText(longiText);
la.setText(latiText);
```

Ich glaube, dass ich nichts übersehen habe und das mein Code bezüglich GPS ist.
Die Listener habe ich auch zugefügt und die virtuellen Methoden überschrieben.
___________________________________

Wenn ich folgenden Code im onClick-Block ersetzte:

```
loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
longi = loc.getLongitude();			
lati = loc.getLatitude();
```

Und statt dessen es dann so aussieht:

```
//loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//longi = loc.getLongitude();			
//lati = loc.getLatitude();

longi = 5.0;
lati = 4.0;
```
 
Dann funktioniert die App wieder, deshalb gehe ich davon aus, dass getLongitude(); und getLatitude(); das Problem verursachen. Genau so verhält es sich auch im onLocationChanged Block des LocationListener.


----------



## schlingel (9. Okt 2012)

Du kannst die GPS-Position im Emulator konfigurieren die zurück kommen soll.

Allerdings ist die Frage interessanter welche Exception fliegt. Schau in den Logcat.


----------



## schlingel (9. Okt 2012)

Beim genauen Hinschauen habe ich die Exception glaube ich erraten: eine NullPointerException

Wenn gerade keine Location da ist, bekommst du null anstatt einer Location. Dann funktioniert natürlich auch getLongitude() nicht.


----------



## Skad (9. Okt 2012)

schlingel hat gesagt.:


> Beim genauen Hinschauen habe ich die Exception glaube ich erraten: eine NullPointerException
> 
> Wenn gerade keine Location da ist, bekommst du null anstatt einer Location. Dann funktioniert natürlich auch getLongitude() nicht.



Vor dem getLongitude() Befehl rufe ich den Befehl loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); immer auf.
Wird daurch nicht sicher gestellt, dass eine Location in der loc-Variablen existiert?


----------



## schlingel (9. Okt 2012)

Nope, eben nicht. getLastKnownLocation ist natürlich null, wenn es keine bekannte Location gibt. Steht auch so in der Doku.

Du wirst hier wohl für diesen Fall einen LocationListener registrieren müssen, der sich die letzte Location holt falls es noch keine gibt.


----------



## Skad (9. Okt 2012)

schlingel hat gesagt.:


> Du kannst die GPS-Position im Emulator konfigurieren die zurück kommen soll.
> 
> Allerdings ist die Frage interessanter welche Exception fliegt. Schau in den Logcat.



Hiermit hat es funktioniert, danke 

So für user, die eventuell auf das gleiche Problem treffen:

Man muss in der cmd-box den Befehl "telnet localhost 5554" ausführen. In Windows 7 ist der Befehl defaultmäßig ausgestellt, deshalb muss man über "Windows Funktionen aktivieren oder deaktivieren" ein richtiges Häckchen setzen. Hier der Link zu einer sehr guten Beschreibung:
How to Enable Telnet in Windows 7


So nun in eclipse den Virtual Device starten.
Cmd-box öffnen (Start -> ind das Textfeld cmd eintippen).
In der cmd-box den Befehl telnet localhost 5554 eingeben. Nun sollte eine Verbindung hergestellt werden.
Wenn die Verbindung existiert kann man über den Befehl "geo fix [x] [y]" dem GPS Default-Werte zuweisen, z.b. "geo fix 20 40".

_________________________________________

Nun bekomme ich 20 und 40 angezeigt, nochmals danke :toll:


----------

