Cómo escuchar los cambios en la base de datos de contactos.
-
05-07-2019 - |
Pregunta
Estoy tratando de escuchar cualquier cambio en la base de datos de contactos.
Así que creo 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 uso ' EditContactActivity
' para cambiar la base de datos de contactos, My onChange ()
no se llama.
Solución
He implementado tu ejemplo tal como está, 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, debes estar haciendo otra cosa mal.
¿Está realizando los cambios a través del cursor con el que está registrado el observador?
Comprueba que con la función Observer deliverSelfNotifications (). (devuelve falso por defecto)
Es posible que desee anular la función de observador con algo como:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Asegúrese de que People.CONTENT_URI se refiera al valor correcto (android.provider.Contacts.People).
Además, le sugiero que utilice Handler con ContentObserver, aunque eso no es lo que hace que su código sea incorrecto en este caso.
Otros consejos
Un simple TIP sobre la respuesta de MannyNS.
Aquí, People.CONTENT_URI
está en desuso.
Codifique como se indica a continuación .-- > ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);