8

Sto costruendo un'app che fa molto affidamento sui contatti dell'utente.Android: Ascolto delle modifiche ai contatti come WhatsApp do

Ho creato un Account e creo RawContacts per conto di questo account quando necessario.
E io uso SyncAdapter e le cose vanno benissimo.

Ma mi manca ancora alcune parti di questo puzzle:

Sto cercando di attuare un comportamento simile a WhatsApp. Tale che-

Quando si verifica una modifica nel nome o nel telefono di qualsiasi contatto, questo verrà inviato al server per la valutazione.

Se questo contatto era già nel "mio" RawContacts, se è stato appena creato ora dall'utente.

So che c'è lo ContentObserver ma il rilevamento di ContactsContract.Contacts.CONTENT_URI sembra la cosa sbagliata da fare perché non fornisce il cambiamento specifico, in più viene generato più volte e da molti eventi che non mi interessano.

So che WhatsApp utilizza SyncAdapter ma penso che potrebbero fare qualcosa di più.

Qualsiasi idea sarebbe molto apprezzata.

+0

@Hagai ... ciao qualsiasi aggiornamento su come hai affrontato questo ?? Ho usato CONTACT_LAST_UPDATED_TIMESTAMP nel mio codice per ottenere i contatti aggiornati più recenti ma questo timbro non cambia se aggiorni un campo in un contatto che ha solo un ID e-mail con esso. –

risposta

0

ContentObserver tracking ContactsContract.Contacts.CONTENT_URI è davvero la strada da percorrere.

Quando si arriva onChange() tua ricerca nella tabella raw_contacts con seguente condizione:

String where = "(rawcontacts.dirty = true or rawcontacts.deleted = 1) and rawcontacts.account_type = <your_custom_type>" 

Il risultato vi darà contatti aggiunti, aggiornati o cancellati.

Se sei interessato a saperne di più dettagli - il motivo per cui è necessario abbonarsi a ContactsContract.Contacts.CONTENT_URI è che il fornitore di contatti attualmente non notifica quali contatti sono stati modificati in onChange(). Ciò è a causa delle transazioni applyBatch() in cui possono essere modificati più contatti. Potrebbe essere in futuro ci sarà un modo per iscriversi ad un sottoinsieme - ma attualmente non ce n'è.