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

StackOverflow https://stackoverflow.com/questions/1401280

  •  05-07-2019
  •  | 
  •  

Question

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, Mon onChange () n'est pas appelé.

Était-ce utile?

La solution

J'ai utilisé votre exemple tel quel et cela fonctionne 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();

}

Vous devez donc faire autre chose de mal.

Faites-vous les modifications avec le curseur avec lequel l’observateur est enregistré?

Vérifiez cela avec la fonction Observer deliverSelfNotifications (). (il retourne faux par défaut)

Vous pouvez remplacer cette fonction d'observateur par quelque chose comme:

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

Assurez-vous que People.CONTENT_URI fait référence à la valeur correcte (android.provider.Contacts.People).

De plus, je vous suggérerais d'utiliser Handler avec ContentObserver, bien que ce ne soit pas ce qui rend votre code erroné dans ce cas.

Autres conseils

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top