1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. BFK, 26.11.2011 #1
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Hallo Forum,
    Ich versuche grad folgendes einfaches in einer Activity zu testen.
    Ich will die Geschwindigkeit vom GPS-Signal am Tele anzeigen lassen. Das ist auch kein Problem.
    In der onLocationChanged-Methode kann ich einfach die Geschwindigkeit abfangen und in einer TxtView ausgeben.

    Mein Problem ist jetzt, dass wenn es kein GPS-Signal gibt die TxtView nen Wert anzeigt, der ja falsch ist (ist ja der vorrige Wert).
    Wie könnte ich hier vorgehen..?
    Also wo könnte ich denn abfangen, dass es kein Signal gibt um darauf zu reagieren..? (Vielleicht bei der onStatusChanged-Methode..?)

    Danke schon im Voraus ..!
    -MFG BFK-
     
  2. strider, 26.11.2011 #2
    strider

    strider Erfahrener Benutzer

    Du könntest die Geschwindigkeit erst anzeigen lassen wenn genug Satelliten für einen fix erfasst wurden.
     
  3. BFK, 26.11.2011 #3
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Nee, das ist ja nicht das Problem. Ich meine wenn es ein Signal gibt, dann wird die Geschwindigkeit schon richtig angezeigt. Aber wenn ich z.B. mit meinem handy in ein Gebäude reingehe, dann steht da ja die Geschwindigkeit des vorrigen Zeitpunkts (also den Zeitpunkt mit dem letzten GPS-Signal).

    Gut wäre den Speed-Wert in diesem Fall ja auf 0 zu setzen, da es ja kein Signal mehr gibt..!
     
  4. GMoN, 28.11.2011 #4
    GMoN

    GMoN Android-Lexikon

    Genau dort. Ich musste mir auch was basteln, als ich festgestellt habe, das ewig die letzten Koordinaten angezeigt werden, wenn der GPS Fix verloren geht. Man kann abfragen, wann der letzte GPS Fix war. In meinem Fall schalte ich nach 10 Sekunden ohne GPSFix vom GPS Provider, auf den Networkprovider um, Du kannst dann ja die Geschwindigkeit auf 0 setzen. So sieht mein onGPSStatusChange aus:

    Code:
    		 private final Listener onGpsStatusChange=new GpsStatus.Listener() {
    			    public void onGpsStatusChanged(int event) {
    			    	Log.i(TAG, "GpsStatusChange = "+event);
    					switch (event) {
    			            case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
    			                if (mLastLocation != null)
    			                    isGPSFix = (SystemClock.elapsedRealtime() - mLastLocationMillis) < 10000;
    			                //Log.i(TAG, "isGPSFix = "+isGPSFix);
    
    			                if (isGPSFix) { // A fix has been acquired.
    			                	if (!Coarse_off){
    			                		lm.removeUpdates(locationListenerCoarse);
    			                		Coarse_off = true;
    			                		Log.i(TAG, "locationListenerCoarse removed");
    			                	}
    			                } else { // The fix has been lost.
    			                	if (Coarse_off & lm.isProviderEnabled("network") & networkgps){
    			                		Coarse_off = false;
    			                		//Criteria CoarseCriteria = new Criteria();
    			                        //CoarseCriteria.setAccuracy(Criteria.ACCURACY_COARSE);
    			                		lm.requestLocationUpdates(
    			                	            lm.NETWORK_PROVIDER, 
    			                	            1000, 
    			                	            0, 
    			                	            locationListenerCoarse);
    			                		Log.i(TAG, "locationListenerCoarse started");
    			                	}
    			                	if (Coarse_off) {
    			                	gps_lat = gps_lon = "NaN";
    			                	gps_acc = 9999;
    			            		speed = "--- km/h";
    			                	}
    			                }
    
    			                break;
    			            case GpsStatus.GPS_EVENT_FIRST_FIX:
    			                // Do something.
    			                isGPSFix = true;
    
    			                break;
    			        }
    			    }
    			};
     
  5. BFK, 30.11.2011 #5
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Danke GMoN für deine Antwort.

    Also meine onStatusChanged-Methode sieht jetzt so aus..:
    Code:
    @Override
            public void onStatusChanged(String arg0, int status, Bundle arg2) {
                
                
                if(status == LocationProvider.TEMPORARILY_UNAVAILABLE)
                {
    //                Log.i(GPSTracker.EASY_TRACKER,"GPS TEMPOR. Not Available");
                    Toast.makeText(getApplicationContext(), "TEMP UNAVAILABLE", Toast.LENGTH_LONG).show();
                    
                    
                }
                else if(status == LocationProvider.OUT_OF_SERVICE)
                {
                    Toast.makeText(getApplicationContext(), "OUT OF SERVICE", Toast.LENGTH_LONG).show();
                }
                else if(status == LocationProvider.AVAILABLE)
                {
                    Toast.makeText(getApplicationContext(), "AVAILABLE", Toast.LENGTH_LONG).show();
                }
                
                
                
            }
    
    Habe das so getestet und leider kam gar keiner Toast-Meldung, obwohl ich paar mal kein GPS-Signal hatte...!

    Wieso..?

    Und wie ich von deinem Code sehe, benutzt du nicht denselben onStatusListener, denn ich benutze. Meiner war in der
    Code:
    private class MyLocationListener implements LocationListener
        {...}
    Klasse dabei als Override-Method, weil ich ja das LocationListener-Interface benutze.
    Wo ist da der Unterschied..?

    Laut Android doku, sollte das ja gehen.
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] GPS NMEA $GPVTG Android App Entwicklung 01.08.2017
Unbehandelte Ausnahme (UnCaughtException) abfangen und Dialog anzeigen Android App Entwicklung 05.03.2017
Du betrachtest das Thema ""Kein GPS-Signal"...wo abfangen..?" im Forum "Android App Entwicklung",