2012-09-03 15 views
7

Ho registrato un servizio ContentObserver e ottengo la funzione onchange() quando c'è un aggiornamento nel telefono come la chiamata o l'aggiornamento del contatto. Ma voglio che la funzione onchange() venga chiamata solo quando si verifica l'aggiunta, l'aggiornamento o l'eliminazione. Ma non voglio quando la chiamata è in arrivo o in uscita. Quindi qualcuno può dirmi quale URI posso registrare in contentObserver? Il mio codice è quiContentObserver per l'aggiornamento dei contatti manualmente

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,new Contact_change()); 

e la classe Contact_change.java è come

public class Contact_change extends ContentObserver{ 

    public Contact_service() { 
    super(null); 
    } 

    @Override 
    public void onChange(boolean selfChange){ 
    Log.i("contact_service","onchange"); 
    Super.onChange(selfChange); 
    } 

@Override 
public boolean deliverSelfNotifications() { 
    return true; 
    } 

} 

Edit:
ho un altro problema è che dopo arrestare il servizio se ho fatto il cambiamento in contatto poi anche onchange() chiamata. Quindi, come posso interrompere la registrazione o la registrazione di contentobserver.

+0

non credo che questo sia possibile. il tempo dell'ultima chiamata è un campo del contatto, quindi cambiarlo sta cambiando il contatto – njzk2

+0

E 'un altro modo per ottenere la notifica delle modifiche in contatto? Perché voglio sincronizzare i contatti con la mia applicazione. – Nency

+0

Non penso che sia davvero un problema se ricevi notifiche extra per eventi di cui non hai bisogno. – njzk2

risposta

0

Ho utilizzato il ContactsContract.Contacts.CONTENT_VCARD_URI come indicato here.

E inoltre è possibile impostare un threshold_time come quello menzionato here

E 'un po' più efficiente.

0

Per interrompere la ricezione di notifiche da ContentObserver, è necessario annullarne la registrazione.

Creare un'istanza di ContentObserver che è possibile utilizzare in seguito per registrare/annullare la registrazione.

Contact_change changeObserver = new Contact_change(); 

Registrati osservatore:

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,changeObserver); 

Annulla registrazione osservatore:

getContentResolver().unregisterContentObserver(changeObserver); 
Problemi correlati