As my application uses content from android.provider.ContactsContract.Data (API > 11) and ContactsContract.Contacts.CONTENT_URI (API < 11) to populate Contacts.
I've tried to registerContentObserver() against these provider. But it calls my ContentObserver even if I tries to Call a person from device as soon as I put the call. It does trigger my ContentObserver which is not useful for me as there's no Content Change in Contacts Provider.
Root Cause:
Seems like LAST_TIME_CONTACTED or something in ContactsContract.Contacts.CONTENT_URI do changes when a call has been made from device which legitimate wokes up by ContentObserver.
Tried:
private class ContactsContentObserver extends ContentObserver {
public ContactsContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Zname.getPreferences().setRefreshContact(true);
}
}
Registered ContentObserver in OnCreate() of Activity
ContactsContentObserver contactsContentObserver = new ContactsContentObserver();
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, contactsContentObserver);
Tried with notifyForDescendents as false on registerContentObserver. Still it triggers out ContentObserver
Ques:
How can one register ContentObserver which triggers if and only if contacts information is under CRUD(Create,Update,Delete) except Last_Time_Contacted or its descendants?
The fundamental problem here is that registering for ContactsContract.Contacts.CONTENT_URI isn't working as you might reasonably think.
The reason why you get updates even if notifyForDescendents is false is because the Uri triggering the update is... ContactsContract.Contacts.CONTENT_URI and not the contact row that is being dialled.
The offending code in the Contacts app can be found at GrepCode and there is a bug filed for this on Google Code.
So to answer your question, you can't register a ContentObserver which will trigger for specific fields on a contact. You would need to have something in your app which will keep track of calculating the differences whenever onChange fires.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With