Android: Kontaktänderungen wie WhatsApp hören

8

Ich baue eine App, die stark auf den Kontakten des Benutzers beruht.

Ich habe ein Account erstellt und bei Bedarf im Namen dieses Kontos RawContacts erstellt.
Und ich benutze SyncAdapter und die Dinge sind großartig.

Aber mir fehlen noch einige Teile dieses Puzzles:

Ich versuche ein ähnliches Verhalten wie WhatsApp zu implementieren. So dass-

Wenn im Namen oder Telefon eines Kontakts eine Änderung auftritt, wird diese an den Server zur Auswertung gesendet .

Ob dieser Kontakt schon in "my" RawContacts war, ob er gerade jetzt vom Benutzer angelegt wurde.

Ich weiß, da ist ContentObserver , aber das Tracking von ContactsContract.Contacts.CONTENT_URI scheint das Falsche zu sein, weil es nicht die spezifische Änderung ergibt, außerdem wird es auf viele Male erhöht und von vielen Ereignissen, die nicht interessieren mich.

Ich weiß, dass WhatsApp SyncAdapter verwendet, aber ich denke, dass sie etwas mehr tun könnten.

Jede Idee würde sehr geschätzt werden.

    
Hagai L 28.06.2015, 18:02
quelle

1 Antwort

1

ContentObserver tracking ContactsContract.Contacts.CONTENT_URI ist in der Tat der richtige Weg.

Wenn Sie onChange() erhalten, fragen Sie die Tabelle raw_contacts mit folgender Bedingung ab:

%Vor%

Das Ergebnis wird Ihnen Kontakte hinzugefügt, aktualisiert oder gelöscht.

Wenn Sie mehr Details erfahren möchten - der Grund, warum Sie ContactsContract.Contacts.CONTENT_URI abonnieren müssen, ist, dass der Kontaktanbieter derzeit nicht mitteilt, welche Kontakte in onChange () geändert wurden. Dies liegt an den Transaktionen applyBatch() , bei denen sich mehrere Kontakte ändern können. Möglicherweise wird es in Zukunft eine Möglichkeit geben, eine Teilmenge zu abonnieren - aber derzeit gibt es keine.

    
RocketRandom 13.11.2015 08:10
quelle