2012-05-03 15 views
9

Deseo recibir una notificación en mi teléfono si hay algún cambio en la base de datos de contactos (agregar, eliminar). Ahora mismo estoy usando ContentObserver para recibir notificaciones. Seguir es mi código. El problema es que no puedo saber qué contacto ha cambiado. ¿Alguien puede ayudar?Android notificar cuándo se actualiza la guía telefónica (Content Observer)

public class ContentObserverActivity extends Activity { 
    Button registerbutton; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     registerbutton=(Button)findViewById(R.id.button1); 
     registerbutton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
      getContentResolver() 
       .registerContentObserver(
         ContactsContract.Contacts.CONTENT_URI, true, 
         new MyCOntentObserver()); 
      } 
     }); 
    } 


    public class MyCOntentObserver extends ContentObserver{ 
     public MyCOntentObserver() { 
      super(null); 
     } 
     @Override 
     public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 
      Log.e("","~~~~~~"+selfChange); 
     } 

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

Gracias de antemano.

+2

observadores de contenido no te dicen cuál cambiado usted tiene que encontrar a cabo mediante la consulta y la comparación con los datos de edad – zapl

+1

La declaración 'super (null);' es sospechoso – Vincent

Respuesta

6

Observer no proporciona la información de qué contacto se agrega/actualiza/elimina. Para conocer esto, guarde los contactos en su propia tabla de DB y cuando el observador envíe la notificación de cambio, compruébelo con los Contactos del sistema.

+4

si quiero saber el '_id' del contacto modificado, ¿cómo puedo obtenerlo ???? – astuter

4

He cambiado el código onChange a esto.

@Override 
public void onChange (boolean selfChange) 
{ 
    this.onChange(selfChange, null); 
} 

@Override 
public void onChange (boolean selfChange,Uri uri) 
{ 
    Cursor cursor = mCntxt.getContentResolver().query(
      ContactsContract.Contacts.CONTENT_URI, null, null, null,ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP + " Desc"); 
    if (cursor.moveToNext()) { 
     String id = cursor.getString(
       cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cursor.getString(
       cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     Log.w("Contact ID", id); 
     Log.w("Person Name",name); 
     } 
} 

Espero que esto ayude ..

+0

Cómo saber si se agregó o borró o actualizó el contacto con el lugar – user3475052

Cuestiones relacionadas