Autore Topic: onStatusChanged non viene mai invocato?  (Letto 594 volte)

Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
onStatusChanged non viene mai invocato?
« il: 25 Febbraio 2012, 19:10:49 CET »
0
Ciao a tutti,

Ho un problema con il LocationListener della mia applicazione.
In fase di test ho notato come non accada niente quando perdo il segnale (ex entro in una galleria), il odice è ben strutturato (è ben copiato da JD) e gli altri casi funzionano egregiamente, mentre onStatusChanged non viene MAI evocato!

Su internet ho trovato qualcuno che affibbiava l'errore ai Samsung ed effettivamente ho un samsung, ma non ci giurerei...

Il mio codice è "standard":

Codice (Java): [Seleziona]
private class MyLocationListener implements LocationListener {
                ImageView img = (ImageView) findViewById(R.id.dashboard_icon);
                TextView message = (TextView) findViewById(R.id.textView2);
               
                @Override
                public void onLocationChanged(Location location) {                     
                        if (location == null) return;
                    mLastLocationMillis = SystemClock.elapsedRealtime();
               
                        img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_green));
                        message.setText("GPS OK");

                        // Aggiorna il marker della mappa
                        mapView.invalidate();

                        // Aggiorna la location
                        Double geoLat = location.getLatitude() * 1E6;
                        Double geoLng = location.getLongitude() * 1E6;
                        GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());

                        mapController.animateTo(point);

                        tvLatitudine.setText(Double.toString(getRound(location.getLatitude(), 5)));
                        tvLongitudine.setText(Double.toString(getRound(location.getLongitude(), 5)));
                        tvVelocita.setText(Double.toString(getRound(location.getSpeed() * 3.6, 1)) + " km/h");
                        tvQuota.setText(Integer.toString((int) location.getAltitude())+ " m");
                        tvAccuratezza.setText(Integer.toString((int) location.getAccuracy())    + " m");
                       
                        mLastLocation = location;
                }

                @Override
                public void onProviderDisabled(String provider) {
                        img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_none));
                        message.setText("GPS spento");
                }

                @Override
                public void onProviderEnabled(String provider) {
                        img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_orange));
                }

                @Override
                public void onStatusChanged(String provider, int status, Bundle extras) {
                        Log.i("GPS","MAGARI-------------------");
                       
                       
                        switch(status){
                        case LocationProvider.AVAILABLE:
                                img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_green));
                                message.setText("GPS OK -finally-");
                                break;
                               
                        case LocationProvider.TEMPORARILY_UNAVAILABLE:
                                img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_orange));
                                message.setText("GPS Temporary not available");                        
                                break;
                               
                        case LocationProvider.OUT_OF_SERVICE:                          
                                img.setImageDrawable(getResources().getDrawable(R.drawable.ic_alert_red));
                                message.setText("GPS lost signal long time ago");                              
                                break;
                        }
                       
                }
        }

Gli altri stati funzionano egregiamente, attivo/disattivo il GPS o sono in corsa il messaggio e l'icona colorata sono perfette.
Purtroppo quando perdo il segnale l'icona resta verde perche non entra mai in onStatusChanged()...

Per il momento ho risolto aggiungendo un GpsStatus.Listener che ad ogni evento controlla se il timing del gps è recente (entro 3 sec dalla data attuale), ma cosi ho aggiunto un listener che mi poppa eventi a nastro e soprattutto mi crea degli effetti strani (raddoppia i messaggi di start e stop del GPS, come se si creasse una seconda istanza del listener, attenzione però li raddoppia e basta, se ci fosse u nbug triplicherebbero, quadri,quinti,..ecc)




Offline xWOLKx

  • Utente junior
  • **
  • Post: 72
  • Adoro quella citazione western!
  • Respect: +7
    • xWOLKx
    • Wolkrasgt
    • Mostra profilo
    • ZondeIT
  • Dispositivo Android:
    Samsung Galaxy Ace
  • Sistema operativo:
    Windows7
Re:onStatusChanged non viene mai invocato?
« Risposta #1 il: 25 Febbraio 2012, 19:28:13 CET »
0
Uhm continuando la ricerca mi pare che non vada su eclair, non vada su froyo, non vada su cyanogen7...mi sa che la soluzione adottata è già la migliore, ma il GpsStatusListener con tutti quegli eventi non si brucierà la batteria??

Fa 10 eventi al secondo per controllare lo stato del gps e in più c'è l'onLocationChange()...

mah...secondo voi? mi arrendo?