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.

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top