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.

War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top