Cómo escuchar los cambios en la base de datos de contactos

Estoy tratando de escuchar cualquier cambio en la base de datos de contactos.

Así que crear mi contentObserver, que es una clase secundaria 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); 

Pero cuando utilizo ' EditContactActivity ' para cambiar la base de datos de contactos, My onChange() no se llama.

He desplegado su ejemplo tal cual es, y funciona 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(); } 

Por lo tanto, debe estar haciendo algo más mal.

¿Está realizando los cambios a través del cursor con el que está registrado el observador?

Compruebe que con la función Observador deliverSelfNotifications (). (Devuelve false de forma predeterminada)

Es posible que desee anular esa función de observador con algo como:

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

Asegúrese de que People.CONTENT_URI se está refiriendo al valor correcto (android.provider.Contacts.People).

También, sugeriría usted usando Handler con ContentObserver, aunque eso no es lo que hace su código incorrecto en este caso.

Un simple TIP sobre la respuesta de MannyNS.

Aquí, People.CONTENT_URI está obsoleto.

En su lugar, utilice el código siguiente .–> ContactsContract.Contacts.CONTENT_URI

  getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.