Contactos ContentObserver llamado aleatoriamente

Estoy utilizando un ContentObserver para escuchar los cambios en la base de datos de contactos. Ahora me di cuenta de que el método onChange () se llama aleatoriamente, incluso si no he hecho ningún cambio en los contactos. Sospecho que esto está de alguna manera relacionado con la sincronización automática de contactos (aunque no haya cambios reales en los contactos en este momento).

¿Existe la posibilidad de ser notificado sólo si hay cambios reales en los contactos, realizados por el usuario?

Thx simon

public class ContactsObserver extends ContentObserver { private final static String TAG = ContactsObserver.class.getSimpleName(); private Context ctx; private List<ContactsChangeListener> listeners = new ArrayList<ContactsChangeListener>(); private ContactsObserver(Context ctx) { super(new Handler()); this.ctx = ctx.getApplicationContext(); ctx.getContentResolver() .registerContentObserver( ContactsContract.Contacts.CONTENT_URI, // uri false, // notifyForDescendents this); // observer } @Override public void onChange(boolean selfChange) { Log.i(TAG, "Contacs change"); for(ContactsChangeListener l : listeners){ l.onContactsChange(); } } @Override public boolean deliverSelfNotifications() { return false; // set to true does not change anything... } public static ContactsObserver register(Context ctx){ Log.d(TAG, "register"); return new ContactsObserver(ctx); } public void unregister(){ Log.d(TAG, "unregister"); ctx.getContentResolver().unregisterContentObserver(this); } public void addContactsChangeListener(ContactsChangeListener l){ listeners.add(l); } public interface ContactsChangeListener{ void onContactsChange(); } } 

Ok, ya que nadie parece tener una respuesta a esta pregunta, aquí es lo que he hecho:

Al crear el observador, carga todos los contactos en una caché. Entonces, en cada evento onChange (), carga los contactos nuevamente y los comparo con los en caché para ver si hay una diferencia o no.

No la solución más elegante, pero funciona al menos …

  • Android: detecta SMS saliente, cuenta incorrecta
  • ¿Por qué el ContentObserver se llama varias veces?
  • Observador de contenido de Android History
  • ContentObserver onChange
  • ¿Cómo hago que mi Android ContentObserver para ContactsContract detecte un contacto añadido, actualizado o eliminado?
  • El método ContentObserver onChange () se llama muchas veces
  • Android evento onChange no se activa en contentObserver para la historia de cromo en android 5 (Lollypop)
  • El método onChange de Content Observer se disparó varias veces
  • ContentObserver vs BroadCastReceiver: Uso de la batería, RAM, CPU?
  • Por qué y cuándo anular el registro de observadores de contenido en android
  • Android notifica cuando se actualiza la guía telefónica (Observador de contenido)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.