1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Minimalbeispiel GPS für Emulator

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von schneseb, 20.09.2011.

  1. schneseb, 20.09.2011 #1
    schneseb

    schneseb Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo Forum,

    ich habe nun einige Quellen im Internet zum Thema GPS gesichtet und mich hier durch die 5 Seiten GPS Ergebnisse im Forum geklickt. Leider habe ich immer noch das Problem, dass ich kein funktionierendes Minimalbeispiel zum GPS testen mit dem Emulator gefunden habe.

    Ich habe begonnen mit dem Tutorial von Lars Vogel, das fand ich gut geschrieben und versucht es 1:1 zum Laufen zu bekommen. Funktionierte nicht, die Felder im DDMS in Eclipse waren ausgegraut, ich konnte keine Positionen eintragen. Auch ein Übermittlung per Telnet über den Port 5554 gab zwar immer "OK" zurück, änderte allerdings nichts. Allerdings hatte ich bei anderen Versuchen schon die Eingabemöglichkeit, aber auch hier zeigte sich keine Änderung.

    Ich glaube am besten trifft mein Problem auch dieser Forumsartikel, bei dem es allerdings keine Rückmeldungen gab.

    das Manifest enthält bei allen Beispielen immer
    INTERNET
    ACCESS_FINE_LOCATION
    ACCESS_COARSE_LOCATION

    Ich suche nun ein "DAU-Beispiel", an dem ich möglichst schnell sehen kann, wo der Fehler liegt. Ich möchte auch nicht auf einem realen Gerät testen, sondern vorerst nur auf dem Emulator. Es scheint irgendwie, dass dort keine Daten ankommen. Am besten wäre es, wenn jemand ein Beispiel bei sich laufen hat, was korrekt ist und welches auf Werte über Eclipse oder Telnet reagiert.

    Im voraus vielen Dank
     
  2. Tom299, 21.09.2011 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    das hier läuft bei mir (emu und handy):

    Code:
    package test.de;
    
    import java.io.IOException;
    import java.util.List;
    
    import android.app.Activity;
    import android.content.Context;
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.widget.Toast;
    
    public class GPSTest extends Activity {
        
        private LocationManager locManager = null;
        private LocationListener locListener = null;
        
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            
            locListener = new LocationListener() {
                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                    Toast.makeText( getApplicationContext(), "Status changed: " + provider + "[" + status + "]", Toast.LENGTH_SHORT ).show();
                }
                
                @Override
                public void onProviderEnabled(String provider) {
                    Toast.makeText( getApplicationContext(), "Gps Disabled: " + provider, Toast.LENGTH_SHORT ).show();
                }
                
                @Override
                public void onProviderDisabled(String provider) {
                    Toast.makeText( getApplicationContext(), "Gps Enabled: " + provider, Toast.LENGTH_SHORT ).show();
                }
                
                @Override
                public void onLocationChanged(Location location) {
                    Double latitude = location.getLatitude();
                    Double longitude = location.getLongitude();
                    String Text = "Current location: " + "Lat=" + latitude.toString() + " Long=" + longitude.toString();
                    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
                }
            };
            
            locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1, 1, locListener);
    
            /*
            for (String provider: locManager.getAllProviders()) {
                System.out.println(provider);
                Location loc = locManager.getLastKnownLocation(provider);
                if (loc != null) {
                    Double latitude = loc.getLatitude();
                    Double longitude = loc.getLongitude();
                    String Text = "Current location for provider " + provider + ": " + "Lat=" + latitude.toString() + " Long=" + longitude.toString();
                    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();                
                }
            }
            */
            
            Location loc = locManager.getLastKnownLocation("gps");
            if (loc != null) {
                Double latitude = loc.getLatitude();
                Double longitude = loc.getLongitude();
                Geocoder geo = new Geocoder(this);
                if (geo != null) {
                    List<Address> addresses;
                    try {
                        addresses = geo.getFromLocation(latitude, longitude, 1);
                        if (addresses.size() > 0) {
                            /*
                            System.out.println(addresses.get(0).getLocality());
                            String text = "Current location for provider " + "gps" + ": " + addresses.get(0).getLocality();
                            Toast.makeText( getApplicationContext(), text, Toast.LENGTH_SHORT).show();
                            Toast.makeText( getApplicationContext(), addresses.get(0).getSubLocality(), Toast.LENGTH_SHORT).show();
                            Toast.makeText( getApplicationContext(), addresses.get(0).getThoroughfare(), Toast.LENGTH_SHORT).show();
                            Toast.makeText( getApplicationContext(), addresses.get(0).getSubThoroughfare(), Toast.LENGTH_SHORT).show();
                            Toast.makeText( getApplicationContext(), addresses.get(0).getPostalCode(), Toast.LENGTH_SHORT).show();
                            Toast.makeText( getApplicationContext(), addresses.get(0).getPhone(), Toast.LENGTH_SHORT).show();
                            */
                            
                            /*
                            Toast.makeText( getApplicationContext(), addresses.get(0).getMaxAddressLineIndex(), Toast.LENGTH_SHORT).show();
                            if (addresses.get(0).getMaxAddressLineIndex() > 0) {
                                Toast.makeText( getApplicationContext(), addresses.get(0).getAddressLine(0), Toast.LENGTH_SHORT).show();
                            }
                            */
                            
                            String text = addresses.get(0).getThoroughfare() + "\n" +
                                          addresses.get(0).getPostalCode() + " " + addresses.get(0).getLocality();
                            Toast.makeText( getApplicationContext(), text, Toast.LENGTH_LONG).show();
                        }
                    } 
                    catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
                /*
                else {
                    String Text = "Current location for provider " + "gps" + ": " + "Lat=" + latitude.toString() + " Long=" + longitude.toString();
                    Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
                }
                */
            }
            
    
        }
        
        @Override
        protected void onDestroy() {
            super.onDestroy();
            if (locManager != null) {
                locManager.removeUpdates(locListener);
                locManager = null;
            }
        }
    
    }
    
     
    schneseb bedankt sich.
  3. schneseb, 21.09.2011 #3
    schneseb

    schneseb Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Hallo Tom,

    danke für das Beispiel - ich werde es bis zum Wochenende getestet haben und dann Rückmeldung geben können.
     
  4. schneseb, 23.09.2011 #4
    schneseb

    schneseb Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    So, nun möchte ich noch eine Rückmeldung geben. Ich habe dein Programm bei mir laufen lassen und es tut sich leider nichts. Wenn ich es ausführe startet korrekt der Emulator. In dem DDMS Perspektive kann ich leider keine Koordinaten eingeben. Per Telnet kann ich mich zum Emulator verbinden und der wird mir auch unter Devices (DDMS) als online angezeigt.

    Wenn alles gestartet ist und ich den Screen per "rechtswisch" mit der Maus freigebe sehe ich den Titel "ShowLocation" und dann

    Latitude: unknown
    Longitute: unknow

    wenn ich mich nun per Telnet verbinde und Koordinate per geo fix übermittle, dann bekomme ich zwar immer ein "OK", aber es ändert sich nichts. Nach kurzer Zeit allerdings scheint der Emulator nicht mehr zu wollen und ich bekomme ewig lange das "android" logo zu sehen.

    Irgendwas scheint hier gar nicht zu funktionieren, ich denke mittlerweile es ist nicht der Code, sondern irgendwas anderes - ich weiß nur leider nicht was.

    Ich habe jetzt auch extra noch bei dem Device ein GPS support auf true gesetzt, ändert nur auch gar nichts.

    Wenn es hier noch Tipps gibt, immer gerne her damit :)

    Thx!
     
  5. schneseb, 23.09.2011 #5
    schneseb

    schneseb Threadstarter Neuer Benutzer

    Beiträge:
    21
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    So ich noch einmal.

    Ich habe nun dein Programm mal auf mein Tablet installiert und bin dann nach draußen. Ja es funktioniert, ich hatte gar nicht so auf den Code geachtet, das Update erfolgt ja nicht in den oben beschriebenen Werten.

    Nur warum will der Emulator nicht?...
     

Diese Seite empfehlen