Autore Topic: "Sensibilità" attivazione onLocationChanged ()  (Letto 552 volte)

Offline markus988

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy N7100 Note II
  • Sistema operativo:
    Windows 7
"Sensibilità" attivazione onLocationChanged ()
« il: 09 Giugno 2013, 17:48:42 CEST »
0
Buonasera a tutti, dunque intanto vi mostro la porzione di codice interessata
Codice: [Seleziona]
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setSpeedAccuracy(Criteria.POWER_LOW);
        LocationListener mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates( mlocManager.getBestProvider(criteria, false), 0, 0, mlocListener);

In Particolare la classe MyLocationListener
Codice: [Seleziona]
public class MyLocationListener implements LocationListener {

                @Override

                public void onLocationChanged(Location loc)
                {
                loc.getLatitude();
                loc.getLongitude();
                String Text = "My current location is: " + "Latitud = " + loc.getLatitude() + "Longitud = " + loc.getLongitude();
                Toast.makeText( getApplicationContext(), Text, Toast.LENGTH_SHORT).show();
                }

}

Ho utilizzato una semplice Toast come debug per testare l'attivazione del servizio onLocationChange, bene questo funziona il problema è che funziona troppo !!! Sono fermo, immobile nella mia stanza e continua ad attivarsi diciamo ogni 8-10 secondi per variazioni di latitudine o longitudine dell'ultima cifra giusto per intenderci.
Visto che l'idea è quella di fare un moveCamera ogni volta che la posizione cambia mi piacerebbe che fosse diciamo ogni 400-500m devo ancora decidere un valore ottimale considerando che il fruitore dovrebbe essere a piedi, ma di certo non ogni boh centimetro?! io, ripeto, sn fermo immobile.
Ora, sottolineo che sono un beginner (ho preferito iniziare da qualcosa di concreto in ogni caso), io ho impostato dei criteri più blandi possibili passati come parametro al getBestProvider cos'altro potrei fare?


Offline AntonioE.

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Microsoft Windows 7 x64
Re:"Sensibilità" attivazione onLocationChanged ()
« Risposta #1 il: 04 Luglio 2013, 23:12:52 CEST »
0
Mi accodo, visto che sono in una situazione simile ( devo scrivere un'applicazione stile Runtastic da usare per fare jogging ) ed i problemi su cui sbatto sono sostanzialmente lo stesso tuo, cioè capire quando uno è effettivamente fermo, e quando il dispositivo perde il fix col satellite ( per intenderci quando il pallino del gps inizia a lampeggiare ).

Non sono una cima nemmeno io, ma potresti intanto provare a mettere parametri più alti alle richieste di update, tipo:

mlocManager.requestLocationUpdates( mlocManager.getBestProvider(criteria, false), 5000, 5, mlocListener);

così da ricevere aggiornamenti ogni 5 secondi (5000 millisecondi ) ed in seguito a spostamenti di almeno 5 metri

edit : non so se andrebbe bene anche per la tua applicazione, ma nel mio caso sto pensando di riconoscere la situazione "sto fermo" non tramite il gps, ma tramite l'accelerometro ... d'altra parte ( e parlo sempre nel caso della mia applicazione ) un tizio che corre sottoporrà il telefono ad un'accellerazione mai ( o credo quasi mai ) costante ( tipo se lo tiene in mano o sul braccio il telefono farà un moto paragonabile ad un pendolo o ad un oscillatore armonico OMMIODDIO fisica cosa mi hai fatto!?!? ç_ç ) e di certo molto superiore all'accelerazione provocata dallo stesso tizio che sta fermo a chiacchierare, quindi perchè scomodare i satelliti a km di distanza da noi per riconoscere uno spostamento di pochi metri?
« Ultima modifica: 05 Luglio 2013, 16:52:48 CEST da AntonioE. »
Non c'è cattivo più cattivo di un buono che diventa cattivo