"Kein GPS-Signal"...wo abfangen..?

B

BFK

Fortgeschrittenes Mitglied
11
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-
 
Du könntest die Geschwindigkeit erst anzeigen lassen wenn genug Satelliten für einen fix erfasst wurden.
 
strider schrieb:
Du könntest die Geschwindigkeit erst anzeigen lassen wenn genug Satelliten für einen fix erfasst wurden.

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..!
 
BFK schrieb:
Also wo könnte ich denn abfangen, dass es kein Signal gibt um darauf zu reagieren..? (Vielleicht bei der onStatusChanged-Methode..?)

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;
			        }
			    }
			};
 
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.
 

Ähnliche Themen

S
Antworten
3
Aufrufe
636
swa00
swa00
A
Antworten
17
Aufrufe
1.851
starbright
S
H
Antworten
2
Aufrufe
930
swa00
swa00
Zurück
Oben Unten