wie man auf Änderungen in der Kontaktdatenbank lauscht
Lesezeit: 3 Minuten
hap497
Ich versuche, auf Änderungen in der Kontaktdatenbank zu hören.
Also erstelle ich meinen contentObserver, der eine untergeordnete Klasse von ist ContentObserver:
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
System.out.println (" Calling onChange" );
}
}
MyContentObserver contentObserver = new MyContentObserver();
context.getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
Aber wenn ich ‘benutze’EditContactActivity‘, um die Kontaktdatenbank My zu ändern onChange() wird nicht angerufen.
FYI – der URI People.CONTENT_URI ist veraltet (vor heute – 15.03.2011). Siehe ContactsContract.Contacts.CONTENT_URI.
– mobibob
16. März 2011 um 0:57 Uhr
Hallo, irgendwelche Ideen, wie ich Informationen über die Art der Änderung bekomme? Kontakt hinzugefügt, gelöscht, aktualisiert, die Felder aktualisiert?
– Alex Poke
26. August 2013 um 8:56 Uhr
MannyNS
Ich habe Ihr Beispiel so eingesetzt, wie es ist, und es funktioniert gut.
package com.test.contentobserver;
import android.app.Activity;
import android.database.ContentObserver;
import android.os.Bundle;
import android.provider.Contacts.People;
public class TestContentObserver extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyContentObserver contentObserver = new MyContentObserver();
getApplicationContext().getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI,
true,
contentObserver);
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d(this.class.getSimpleName(), "A change has happened");
}
}
}
Irgendwas anderes muss falsch sein…
Nehmen Sie die Änderungen über den Cursor vor, mit dem der Beobachter registriert ist?
Überprüfen Sie dies mit der Observer-Funktion deliverSelfNotifications(). (es gibt standardmäßig false zurück)
Möglicherweise möchten Sie diese Beobachterfunktion mit etwas wie:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Seltsam, dass es bei dir ohne Handler funktioniert. Es war nicht für mich. Außerdem frage ich mich wirklich, wie Sie Ihren Code im UI-Thread ausführen können … Möglicherweise fehlt mir jedoch etwas, ich bin neu in diesem Thema.
– Snikola
21. Mai 2013 um 4:57 Uhr
Woher weiß ich, dass Kontakte im Adressbuch aktualisiert wurden?
– Benutzer366584
2. April 2014 um 7:31 Uhr
Gibt es Ereignisse, die Kontaktänderungen entsprechen, um sie in die Manifestdatei aufzunehmen, damit der Dienst meiner App nicht im Speicher bleibt?
– kolyaseg
23. November 2015 um 8:11 Uhr
Warnung!!! People.CONTENT_URI ist veraltet, verwenden Sie stattdessen ContactsContract.Contacts.CONTENT_URI.
– David
20. September 2017 um 10:11 Uhr
onChange() ruft mehrmals an, wenn sich der Inhalt ändert. Wie kann dies verhindert werden?
– Sagar
7. Mai 2018 um 6:18 Uhr
Nizam
BEARBEITEN: Die Antwort von MannyNS wurde jetzt mit dem neuen URI (ContactsContract.Contacts.CONTENT_URI)
Ein einfacher TIPP zur Antwort von MannyNS.
Hier, People.CONTENT_URI ist veraltet.
Code stattdessen wie folgt.–>ContactsContract.Contacts.CONTENT_URI
In diesem ContentObserver; Gibt es eine Möglichkeit, Kontaktdetails zu erhalten, die hinzugefügt oder geändert wurden? Ich möchte einen ähnlichen Listener erstellen, aber einige Vorgänge für hinzugefügte/geänderte Kontakte ausführen.
– Allzhere
1. Oktober 2013 um 15:58 Uhr
Eine Nutzung ist meines Wissens nach nicht möglich CotentObserver. Siehe diesen Link
– Nisam
2. Oktober 2013 um 9:22 Uhr
Ich denke nicht, dass dies eine separate Antwort sein sollte. Ich denke, Sie hätten das Original bearbeiten sollen, um die Erklärung der Abwertung hinzuzufügen.
– stack_overflow_user
6. Oktober 2019 um 11:18 Uhr
8681700cookie-checkwie man auf Änderungen in der Kontaktdatenbank lauschtyes
FYI – der URI People.CONTENT_URI ist veraltet (vor heute – 15.03.2011). Siehe ContactsContract.Contacts.CONTENT_URI.
– mobibob
16. März 2011 um 0:57 Uhr
Hallo, irgendwelche Ideen, wie ich Informationen über die Art der Änderung bekomme? Kontakt hinzugefügt, gelöscht, aktualisiert, die Felder aktualisiert?
– Alex Poke
26. August 2013 um 8:56 Uhr