13

I want to get a notification on my phone if there is any change in the contact database(add,delete).Right now i am using ContentObserver to get notified.Following is my code.Problem is that i able not able to know which contact is changed.Can anyone help???

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

Thanks in advance.

Karan_Rana
  • 2,813
  • 2
  • 26
  • 35

3 Answers3

8

Observer does not provide the information that which contact is added/update/deleted. To get to know this save the contacts in your own DB table and when observer send the change notification check it with system's Contacts.

Krishnakant Dalal
  • 3,568
  • 7
  • 34
  • 62
7

I have changed onChange code to this.

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

Hope this helps..

Sachin
  • 111
  • 1
  • 8
-2

I think it may be possible using a Broadcast manager / receiver http://www.intertech.com/Blog/using-localbroadcastmanager-in-service-to-activity-communications/

sancelot
  • 1,905
  • 12
  • 31