Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android notify when phone book is updated(Content Observer)

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.

like image 853
Karan_Rana Avatar asked May 03 '12 06:05

Karan_Rana


2 Answers

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.

like image 115
Krishnakant Dalal Avatar answered Oct 19 '22 23:10

Krishnakant Dalal


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..

like image 44
Sachin Avatar answered Oct 19 '22 23:10

Sachin