2015-04-23 15 views
15

Sto lavorando su Contact Sync in Android e ho eseguito correttamente con First time Contact Sync.Ottieni contatti aggiornati in Android per la sincronizzazione dei contatti

Ecco cosa sto facendo. 1. Recupero di tutti i contatti e salvataggio di ciascun contatto nel DB con Contact._ID 2. Recupero di nomi e numeri di telefono e salvataggio nel DB.

Successivamente, invierò i dati dei contatti al server in modo che il server possa essere aggiornato.

Ora il problema è come posso controllare se il mio contatto particolare è aggiornato o no?

Ho implementato Broadcast Receiver in modo che la mia app possa ottenere informazioni sull'aggiornamento/aggiunta/cancellazione del contatto. Ma voglio trattare un contatto particolare.

Ho trovato una soluzione che è Dirty Flag. Ci dice circa il contatto sia aggiornato o meno, Ecco il link di riferimento: http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

Ma non sono in grado di usare questa bandiera sporca, potrebbe qualcuno per favore aiutarmi implementando Dirty Flag.

Grazie in anticipo!

+0

perché non sei in grado di usarlo? – pskink

+0

Hai la soluzione? Sto affrontando lo stesso problema nella mia domanda –

risposta

5

I contatti devono avere il valore ContactsContract.RawContacts.VERSION.

Se si salva questa versione sul server (o in un database nell'app), è possibile determinare se un contatto è cambiato dall'ultima volta che è stato inviato al server.

+2

eventuali commenti su questo? Sto ancora cercando la soluzione perfetta. –

+1

No, mi dispiace. Dovrei provarlo da solo, ma attualmente non ne ho il tempo. – tknell

+3

No Worries, Thanks Mate! –

4

Otterrete il numero di contatti aggiornati dopo un determinato periodo di tempo dal database dei contatti utilizzando la query sottostante.

ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 

, cercare di confrontare l'ultima volta caricato sul server con questa volta Speri che allora si otterrà la lista dei contatti aggiornati dopo l'upload di successo al server.

controllo questo http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html#CONTACT_LAST_UPDATED_TIMESTAMP

+2

Qualche commento caro? –

+0

è possibile utilizzare il database sqlite per archiviare il contatto con una data e l'ora.e è possibile effettuare una sorta di confronto e aggiornare la tabella .. in questo modo –

+1

Ha avuto un problema, ogni volta che si effettuano chiamate e non si modifica alcun campo in il contatto, Android aggiorna automaticamente il valore di CONTACT_LAST_UPDATED_TIMESTAMP al momento della chiamata, che è errato –

2

Come hai detto che si memorizzano Contacts._ID nel database locale e il recupero phone number e altre informazioni è legato al contatto dalla Contacts db.

vorrei suggerire di memorizzare i dati dalla tabella RawContacts nella vostra mappatura locale e controllare le voci associate al raw_contact_id nella data tabella dei contatti si ottengono tutti i contatti con facilità.

Per controllare i contatti modificati o eliminati Con la raw_contact_id presente nella vostra mappatura controllo tabella locale con la tabella data che se campo di contatto associato al raw_contact_id'sversion è cambiato o isDeleted campo viene modificato (ie; contatto viene eliminato dal contatto applicazione)

+0

puoi fornire esempio? –

2

Quando l'ho utilizzato ho utilizzato ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP, ma ho avuto problemi a capire che si trattava di millisecondi, stavo usando una colonna per ottenere i nuovi file ed è in secondi (MediaStore.MediaColumns .DATE_ADDED) quindi fai attenzione a usare il numero corretto.

Uri uri = ContactsContract.Contacts.CONTENT_URI; 
Cursor cursorNew; 
cursorNew = contentResolver.query(uri, 
     null, 
     ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + ">=?", 
     new String[]{lastUpdate}, 
     null  // Ordering 
); 

'lastUpdate' è una stringa con il mio timestamp

Un'altra cosa da prestare attenzione è la colonna di questo contatto appena apparso sul API 18, l'ultima versione Jelly Bean, in modo per risolvere questo problema una volta per tutte Ho appena cambiato il mio file gradle.

+0

Qual è la risposta che CONTACT_LAST_UPDATED_TIMESTAMP viene aggiornata ad ogni chiamata? Come hai lavorato su questo? – Gaket

Problemi correlati