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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top