2012-09-03 41 views
7

He registrado un ContentObserver desde el servicio y obtengo la función onchange() cuando hay una actualización en el teléfono como llamada o actualización de contacto. Pero quiero que se llame a la función onchange() solo cuando suceden, actualizan o eliminan. Pero no quiero cuando la llamada es entrante o saliente. Entonces, ¿alguien puede decirme qué URI puedo registrar en contentObserver? Mi código es aquíContentObserver para actualización de contacto manualmente

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

y la clase Contact_change.java es como

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; 
    } 

} 

Editar:
tengo otro problema es que después de detener el servicio si he hecho el cambio en contacto a continuación, también onchange() se llama función. Entonces, ¿cómo puedo detener eso o registrar el contentobserver.

+0

no creo que esto es posible. el momento de la última llamada es un campo del contacto, por lo que cambiarlo está cambiando el contacto – njzk2

+0

¿Es otra manera de obtener una notificación de cambios en el contacto? Porque quiero sincronizar los contactos con mi aplicación. – Nency

+0

No creo que sea realmente un problema si recibe notificaciones adicionales por evento que no necesita. – njzk2

Respuesta

0

He utilizado el ContactsContract.Content.CONTENT_VCARD_URI como se menciona here.

Y también se podría establecer un threshold_time como el que se menciona here

Es un poco más eficiente.

0

Para dejar de recibir notificaciones de ContentObserver, debe anular el registro.

Crea una instancia de ContentObserver que puedes usar más tarde para registrar/anular el registro.

Contact_change changeObserver = new Contact_change(); 

Registro observador:

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

Anular el registro de observadores:

getContentResolver().unregisterContentObserver(changeObserver);