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

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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von BFK, 26.11.2011.

  1. BFK, 26.11.2011 #1
    BFK

    BFK Threadstarter Erfahrener Benutzer

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    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

    Beiträge:
    208
    Erhaltene Danke:
    45
    Registriert seit:
    30.09.2011
    Phone:
    Nexus S
    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

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    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

    Beiträge:
    1,134
    Erhaltene Danke:
    131
    Registriert seit:
    01.02.2009
    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

    Beiträge:
    160
    Erhaltene Danke:
    10
    Registriert seit:
    08.12.2010
    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.
     

Diese Seite empfehlen