como escutar alterações em contato Banco de Dados
-
05-07-2019 - |
Pergunta
Eu estou tentando ouvir qualquer alteração no banco de dados de contato.
Então, eu crio minha contentObserver que é uma classe filha 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);
Mas Quando eu uso 'EditContactActivity
' para alterar o banco de dados de contato, Meu onChange()
não são chamados.
Solução
Eu ter implantado o seu exemplo como ele é, e ele funciona muito bem.
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();
}
Assim, você deve estar fazendo algo errado.
Você está fazendo as mudanças através do cursor o observador está registrado com?
Verifique se com as deliverSelfNotifications função Observer (). (Ele retorna false por padrão)
Você pode querer substituir essa função de observador com algo como:
@Override
public boolean deliverSelfNotifications() {
return true;
}
Certifique-se de que People.CONTENT_URI está se referindo ao valor correto (android.provider.Contacts.People).
Além disso, eu sugiro que você usar Handler com ContentObserver, embora isso não é o que faz o errado código neste caso.
Outras dicas
Um simples dica sobre resposta MannyNS 's.
Aqui, People.CONTENT_URI
está obsoleta.
código da seguinte forma, em vez .--> ContactsContract.Contacts.CONTENT_URI
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentobserver);