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.
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:
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.
Tags und Links android android-contentprovider android-syncadapter android-contentresolver