2012-05-03 11 views
9

Chcę otrzymać powiadomienie na mój telefon, jeśli nastąpiła jakakolwiek zmiana w bazie danych kontaktów (dodaj, usuń) .Right teraz używam ContentObserver, aby otrzymywać powiadomienia. mój kod. Problem polega na tym, że nie jestem w stanie wiedzieć, który kontakt się zmienił. Czy ktoś może pomóc?Android powiadamia o aktualizacji książki telefonicznej (obserwator zawartości)

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

Z góry dziękuję.

+2

obserwatorzy treści nie powiedzieć, który z nich zmieniło trzeba znaleźć przez odpytywanie i porównując ze starymi danymi – zapl

+1

Stwierdzenie „super (null);” jest podejrzane. – Vincent

Odpowiedz

6

Obserwator nie dostarcza informacji o tym, który kontakt został dodany/zaktualizowany/usunięty. Aby to poznać, zapisz kontakty we własnej tabeli DB, a gdy obserwator wyśle ​​powiadomienie o zmianie, zaznacz je w Kontaktach systemu.

+4

jeśli chcę poznać '_id' zmienionego kontaktu, niż jak mogę go uzyskać ???? – astuter

4

Zmieniłem kod onChange do tego.

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

Nadzieja to pomaga ..

+0

Jak sprawdzić, czy kontakt z pogodą został dodany, usunięty lub zaktualizowany – user3475052

Powiązane problemy