53 votes

comment écouter les changements dans la base de données de contacts

J'essaie d'écouter tout changement dans la base de données de contacts.

Je crée donc mon contentObserver qui est une classe enfant de 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);
 

Mais lorsque j'utilise 'EditContactActivity' pour modifier la base de données de contacts, la fonction Mon onChange n'est pas appelée.

53voto

MannyNS Points 3510

J'ai déployé par votre exemple, comme il est, et il fonctionne très bien.

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();

}

Donc, vous devez être en train de faire quelque chose de mal.

Êtes-vous d'apporter les modifications à l'aide du curseur de l'observateur est enregistré avec?

Vérifiez que la fonction d'Observateur deliverSelfNotifications(). (elle retourne false par défaut)

Vous souhaitez peut-être désactiver cette fonction d'observateur avec quelque chose comme:

@Override
public boolean deliverSelfNotifications() {
    return true;
    }

Assurez-vous que les Gens.CONTENT_URI est en se référant à la valeur correcte (android.fournisseur de.Les Contacts.Les personnes).

Aussi, je vous suggère de l'aide de Gestionnaire avec ContentObserver, si ce n'est pas ce que fait votre code de mal dans ce cas.

28voto

Nizam Points 3724

Un simple conseil sur la réponse de MannyNS.

Ici, People.CONTENT_URI est obsolète.

Code comme suit à la place .--> ContactsContract.Contacts.CONTENT_URI

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X