Da meine Anwendung Inhalte von android.provider.ContactsContract.Data
(API & gt; 11) und ContactsContract.Contacts.CONTENT_URI
(API & lt; 11) verwendet, um Contacts
zu füllen.
Ich habe registerContentObserver()
gegen diesen Anbieter versucht. Aber es ruft mein ContentObserver
an, auch wenn ich versuche, eine Person vom Gerät anzurufen, sobald ich den Anruf getätigt habe. Es löst mein ContentObserver
aus, was für mich nicht nützlich ist, da es keine Inhaltsänderung in Contacts Provider
gibt.
Ursache:
Scheint so, als ob LAST_TIME_CONTACTED
oder etwas in ContactsContract.Contacts.CONTENT_URI
Änderungen durchführt, wenn ein Anruf von einem Gerät getätigt wurde, dessen legitimes Aufwachen durch ContentObserver
ausgelöst wurde.
Versucht:
%Vor% Registrierte ContentObserver
in OnCreate()
von Activity
Versucht mit notifyForDescendents
als false
für registerContentObserver
. Trotzdem löst es ContentObserver
Fragen:
Wie kann man ContentObserver
registrieren, was genau dann auslöst, wenn die Kontaktinformationen unter CRUD (Erstellen, Aktualisieren, Löschen) stehen außer Last_Time_Contacted
oder seinen Nachkommen?
Da android.provider.ContactsContract
content provider eine eigene Komplexität hat, macht es ContentObserver
schwierig, nur auf contacts
content change zu benachrichtigen, außer es ist LAST_TIME_CONTACTED
field, da jeder andere dazu übergeht, dies zu sagen und so ist es auch.
Man muss seine eigene Logik entwickeln, ob contacts
data aktualisiert wird oder nicht, wenn ContentObserver
dies meldet.
Punkte, die die Logik berücksichtigen, ob contacts
wirklich aktualisiert wird oder nicht.
ContentObserver
in Service
was STICKY
ist, damit es dort sein kann, wenn Kontakte Änderungen erhalten. Telefonbuchlogik synchronisieren: - Da ich Kontakte mit SQLite gepflegt habe, prüfe ich, ob das existiert oder nicht und ob ich Logik aufbauen soll.
%Vor% Das grundlegende Problem hierbei ist, dass die Registrierung für ContactsContract.Contacts.CONTENT_URI
nicht funktioniert, wie Sie vielleicht denken.
Der Grund, warum Sie Updates erhalten, auch wenn notifyForDescendents
ist false
ist, weil die Uri
, die das Update auslöst, ... ContactsContract.Contacts.CONTENT_URI
und nicht die Kontaktzeile ist, die gerade gewählt wird .
Der anstößige Code in der App "Kontakte" finden Sie unter GrepCode und es wurde ein Fehler auf Google-Code .
Um Ihre Frage zu beantworten, können Sie kein ContentObserver
registrieren, das für bestimmte Felder eines Kontakts ausgelöst wird. Sie müssen etwas in Ihrer App haben, das die Berechnung verfolgt die Unterschiede, wenn onChange
ausgelöst wird.
Tags und Links android android-contentprovider contentobserver