wie man auf Änderungen in der Kontaktdatenbank lauscht

Lesezeit: 3 Minuten

wie man auf Anderungen in der Kontaktdatenbank lauscht
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

wie man auf Anderungen in der Kontaktdatenbank lauscht
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

wie man auf Anderungen in der Kontaktdatenbank lauscht
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

    getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);

  • 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

868170cookie-checkwie man auf Änderungen in der Kontaktdatenbank lauscht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy