wie für Änderungen in Kontakt Datenbank hören
-
05-07-2019 - |
Frage
Ich versuche, für jede Änderung in der Kontaktdatenbank zu hören.
Also ich meine contentObserver schaffen, die ein Kind Klasse von ContentObserver
ist:
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 ‚EditContactActivity
‘ verwenden, um die Kontaktdatenbank zu ändern, wird My onChange()
nicht aufgerufen.
Lösung
Ich habe Ihr Beispiel 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);
this.getApplicationContext().getContentResolver().registerContentObserver (People.CONTENT_URI, true, contentObserver);
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
}
MyContentObserver contentObserver = new MyContentObserver();
}
So müssen Sie etwas anderes falsch machen.
Machen Sie die Änderungen durch den Cursor der Beobachter mit registriert?
Überprüfen Sie, ob die Beobachterfunktion deliverSelfNotifications (). (Es gibt false zurück, in der Standardeinstellung)
Sie möchten, dass die Beobachter-Funktion mit so etwas wie außer Kraft zu setzen:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Stellen Sie sicher, dass People.CONTENT_URI auf korrekten Wert bezieht (android.provider.Contacts.People).
Auch ich würde vorschlagen, Sie Handler mit ContentObserver verwenden, obwohl das nicht ist, was in diesem Fall der Code falsch macht.
Andere Tipps
Ein einfacher Tipp über MannyNS ‚s Antwort.
Hier People.CONTENT_URI
ist veraltet.
-Code wie folgt statt .--> ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);