Domanda

Ho un'applicazione Android. In base alla posizione geo corrente dell'utente, voglio recuperare alcuni dati remoti in background e conservarla. La mia applicazione è:

A determinato intervallo di un allarme di incendi fino il mio servizio. Service utilizza una classe anonima alla domanda posizione corrente e registra un callback LocationListener. Su chiamata di onLocationChanged () Io inizio i dati remoti recuperano dal server.

Tuttavia una volta che il mio servizio è fatto registrare l'ascoltatore posizione utilizzando anonymos classe, restituisce come previsto; in quanto non aspetta che di callback per accadere prima di finire. Dal momento che callback richiede un po 'di tempo ed effettua una chiamata quando il servizio è già tornato, getta un errore che dice:

java.lang.RuntimeException: Handler{43e82510} sending message to a Handler on a dead thread

Il che è abbastanza comprensibile. Una soluzione rapida per me ora è che posso usare getLastKnownLocation da locationManager come che non risponde indietro di callback; ma cosa succede se voglio l'ultima località al momento, in un'attività di servizio e non? Come posso aspettare per callback per succedere e fermare il mio servizio di tornare.

Inoltre, a che punto lastKnownlocation viene aggiornato? GPS Ogni volta registra una nuova posizione; vuol aggiornarlo? Quello che voglio sapere è che se non è più recente può ancora essere chiusa al più recente? Come non ho visto un'opzione in emulatore Android per configurare il periodo di tempo tra gli aggiornamenti successivi.

Ogni aiuto è molto apprezzato. Acclamazioni

È stato utile?

Soluzione

  

, ma cosa succede se voglio l'ultima località al momento, in un'attività di servizio e non?

Siamo spiacenti, ma questo non è possibile, sia in un servizio o un'attività. Ad esempio, se la radio GPS è spento, e si richiede dati di posizione dal GPS, ci vorranno decine di secondi solo per ottenere una correzione, e che, se si è fortunati. Potrebbe non ottenere una correzione a tutti.

  

Come posso aspettare per callback per succedere e fermare il mio servizio di tornare.

Non lo sai. Tu fai quello che hai detto avresti fatto:

  

uso getLastKnownLocation da locationManager come che non risponde indietro di callback

Quindi, avere il vostro Service (che si spera un IntentService) verificare se getLastKnownLocation() succede ad avere un valore. Se lo fa, usarlo. In caso contrario, registerLocationUpdates() utilizzando un PendingIntent che passerà il controllo al vostro IntentService. Quando si arriva che Intent, utilizzare la posizione e annullare la registrazione per gli aggiornamenti (assumendo il periodo di allarme è bella e lunga, come, ad esempio, una volta ogni ora).

Cose ottenere difficile se il vostro allarme è un allarme _WAKEUP. Sarà quindi necessario per tenere una WakeLock, in modo che il dispositivo non ricadere addormentato mentre si sta cercando di ottenere una posizione GPS. Tuttavia, è necessario rilasciare che a volte WakeLock, e se non siamo in grado di ottenere una posizione GPS ... ummm ... beh, questo è la parte difficile. Cercando di capire un bel modo pulito di gestire questo, e l'attuazione di esso come un componente riutilizzabile (ad esempio, LocationAlarmService), è uno dei 18.000 articoli sul mio to-do list.

  

Inoltre, a che punto lastKnownlocation viene aggiornato? GPS Ogni volta registra una nuova posizione; Non mi> aggiornarlo?

Per quanto ne so, sì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top