come ascoltare le modifiche nel database di contatti
-
05-07-2019 - |
Domanda
Sto cercando di ascoltare eventuali cambiamenti nel database dei contatti.
Quindi creo il mio contentObserver che è una classe figlio di 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);
Ma quando uso ' EditContactActivity
' per cambiare il database dei contatti, il mio onChange ()
non viene chiamato.
Soluzione
Ho distribuito il tuo esempio così com'è e funziona benissimo.
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();
}
Quindi, devi fare qualcos'altro di sbagliato.
Stai apportando le modifiche tramite il cursore con cui l'osservatore è registrato?
Verifica che con la funzione Observer deliverSelfNotifications (). (restituisce false per impostazione predefinita)
Potresti voler sostituire quella funzione di osservatore con qualcosa del tipo:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Assicurati che People.CONTENT_URI faccia riferimento al valore corretto (android.provider.Contacts.People).
Inoltre, ti suggerirei di utilizzare Handler con ContentObserver, anche se in questo caso non è ciò che rende il tuo codice errato.
Altri suggerimenti
Un semplice SUGGERIMENTO sulla risposta di MannyNS.
Qui, People.CONTENT_URI
è obsoleto.
Codice come segue invece .-- > ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);