Autore Topic: [Location] Problema Timertask  (Letto 456 volte)

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Market Developer Name:
    Christian
Re:[Location] Problema Timertask
« Risposta #15 il: 22 Ottobre 2010, 17:55:30 CEST »
0
Ok, ma se io creo un " LocationListener locationListener = new LocationListener() {" dovrei supporre che resterà attivo per tutta l'esecuzione del programma e che continuerà a trovare dove mi trovo senza l'utilizzo di un Timertask o sbaglio?

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +12
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:[Location] Problema Timertask
« Risposta #16 il: 23 Ottobre 2010, 01:18:59 CEST »
0
ciao, sono capitato qui in quanto sto sviluppando un'applicazione con specifiche simili. Quello che ti posso dire è che Ricky e 7h38uugg3r (che nome...daaaaai!!!  o_O) ti hanno risposto in maniera più che esaustiva al problema.
Posso darti inoltre due suggerimenti: il primo riguarda l'exception ed è di sviluppare su Eclipse, applicazione consigliata e "sponsorizzata" da Google per sviluppare su Android. Anche se sei libero di fare come credi, se il codice "throw ..." è stato generato automaticamente da NetBeans è un bello scherzetto! Eclipse mette semplicemente un "segnalibro" con //TODO...molto meno invasivo!  :-o
Per quanto riguarda invece la domanda iniziale che facevi, quello che mi sento di dirti è che per quello che intendi fare, ovvero fare un update della Location ogni TOT di tempo, il metodo chiave è il requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener) e basta inserire solo quello nel TimerTask. Per il resto, il LocationListener, il LocationManager ecc li puoi istanziare benissimo all'esterno e al massimo passarli per parametro, oppure metterli globali e private nella classe.
Per farti un esempio io agirei (e sto facendo nella mia applicazione) così:
- la mia Activity (o nel mio caso un Service) implementa la classe LocationListener e quindi tutti i suoi metodi
- all'interno del metodo OnLocationChanged faccio un caching della Location
- chiamo LocationManager.removeUpdates() fermando così il listener
- subito dopo però metto in schedule il TimerTask, a cui assegno il compito di riattivare requestLocationUpdates() dopo un tempo da me fissato...

In tal modo ho il controllo sulla temporizzazione degli aggiornamenti della location e, secondo me, è meno complicato di come stavi facendo tu. Chiedo ai grandi saggi di confermare se ciò che ho detto è cosa buona e giusta o solo una castroneria (in tal caso avvisatemi per tempo che mi torna utile per la mia applicazione!!!  :-P). Buon developing! ^_^

Offline max246

  • Utente junior
  • **
  • Post: 73
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    G1
  • Market Developer Name:
    Christian
Re:[Location] Problema Timertask
« Risposta #17 il: 23 Ottobre 2010, 09:19:48 CEST »
0
Ho provato a creare il tutto nella mainactivity e ora mi aggiorna automaticamente senza bisogno di un timertask, perciò la mia supposizione che locationlistener è sempere attivo e si aggiorna a da solo è vero :)
Non serve richiamarlo, o meglio per altri progetti magari si, ma per il mio non serve :P

Grazie comunque

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +12
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:[Location] Problema Timertask
« Risposta #18 il: 23 Ottobre 2010, 13:08:58 CEST »
0
certo, un listener è per definizione sempre attivo. ma, bada bene, quello che lo rende attivo non è la sua istanziazione, ma bensi il requestLocationUpdate(). Ad gni modo quello che ti suggerivo io era un TimerTask per il continuo spegnere/riaccendere del listener., come consigliato qui: Obtaining User Location | Android Developers. Viene infatti spiegato che mantenere sempre attiva la richiesta di aggiornamenti sulla Location causa un intenso consumo della batteria e che, a meno che tu non ne abbia davvero bisogno, sarebbe cosa buona e giusta interrompere e riprendere periodicamente l'aggiornamento (removeUpdates() + requestLocationUpdates()). Il modo per fare tutto ciò che ho pensato io è quello che ti ho suggerito nella risposta precedente.

saluti