Ho un'app in cui spero di inviare i dettagli nell'elenco dei contatti Android a un server remoto, in modo che l'utente possa vedere i suoi contatti online. Per fare ciò, desidero notificare al server remoto eventuali modifiche apportate al telefono all'elenco dei contatti.Metodo Observer onChange chiamato due volte dopo 1 modifica nel cursore
Ho impostato un ContentObserver su "ContactsContract.Contacts.CONTENT_URI" da un servizio che viene avviato all'avvio del telefono.
Ho un certo numero di quiestions, i primi 2 sono incidentali, la terza è la mia principale preoccupazione.
1: Una volta che ho creato un servizio che registra un ContentObserver sul mio cursore, fa quel osservatore esiste solo all'interno del servizio? Voglio dire, se il servizio viene ucciso, il ContentObserver continua ad osservare?
2: Ho il sospetto che la risposta è no, ma io chiederò comunque. Esiste comunque la possibilità di sapere quale contatto viene aggiornato sta attivando il metodo onchange del mio contentObserver? attualmente devo compilare l'elenco di tutti i contatti sul telefono e inviarli al mio server remoto, sarebbe molto più semplice inviare semplicemente i dettagli dei contatti che sono stati aggiornati.
3: Questa è la mia domanda principale, quando faccio un cambiamento alla mia lista dei contatti del metodo onChange viene attivato due volte in rapida successione. 1 cambio, 2 chiamate. Esiste comunque la gestione di questo?
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
risultati in 2 linee veloci nella mia Logcat:
detected change in contacts: false
detected change in contacts: false
+1, il 10000ms secondo funziona in tutti i casi senza errori, avete ricevuto feedback dagli utenti, grazie? –
Non ho ricevuto alcuna risposta da parte degli utenti in merito. Non dirò il suo miglior modo di implementarlo ma funzionerà bene fin da ora.è una specie di patch che abbiamo dovuto implementare. –
Mi piace più 'currentTime = System.CurrentTimeMillis()' 'if (nextCallTime
Kobor42