[英]Unable to fetch deleted contacts from ContactsContract.Contacts.CONTENT_URI
[英]ContentObserver should call if and only if ContactsContract.Contacts.CONTENT_URI changes
由於我的應用程序使用來自android.provider.ContactsContract.Data
(API> 11)和ContactsContract.Contacts.CONTENT_URI
(API <11)的內容來填充Contacts
。
我試圖對這些提供者registerContentObserver()
。 但即使我在撥打電話時嘗試通過設備呼叫某個人,它也會調用我的ContentObserver
。 它會觸發我的ContentObserver
,這對我ContentObserver
,因為Contacts Provider
沒有內容更改。
根本原因:
好像LAST_TIME_CONTACTED
或東西ContactsContract.Contacts.CONTENT_URI
當呼叫已經從設備制造,其合法wokes增長做改變ContentObserver
。
嘗試:
private class ContactsContentObserver extends ContentObserver {
public ContactsContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Zname.getPreferences().setRefreshContact(true);
}
}
在Activity
OnCreate()
中注冊了ContentObserver
ContactsContentObserver contactsContentObserver = new ContactsContentObserver();
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, contactsContentObserver);
在registerContentObserver
上嘗試使用notifyForDescendents
為false
。 它ContentObserver
觸發ContentObserver
QUES:
當且僅當聯系人信息在除了Last_Time_Contacted
或其后代之外的CRUD(創建,更新,刪除)下時,如何注冊ContentObserver
?
由於android.provider.ContactsContract
內容提供商有自己的復雜性,這使得ContentObserver
很難僅通過contacts
內容更改通知,除了它的LAST_TIME_CONTACTED
字段,因為每個人都會說這些,所以它是。
當ContentObserver
通知時,無論contacts
數據是否得到更新,都需要開發自己的邏輯。
要考慮構建邏輯是否真正得到更新contacts
要點。
Service
中添加ContentObserver
,這是STICKY
因此當聯系人發生變化時它就可以存在。 同步電話簿邏輯: - 因為我使用SQLite維護了聯系人,所以檢查是否存在,並建立邏輯。
ContentValues values;
Cursor cursor = Zname.getApplication().getContentResolver().query(DBConstant.All_Contacts_Columns.CONTENT_URI,null,DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER+ "=?",new String[] { _contact.getContactNumber() },null);
if (cursor.getCount() <= 0) {
cursor.moveToFirst();
Zname.getApplication().getContentResolver().delete(DBConstant.All_Contacts_Columns.CONTENT_URI,DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER+ "?=",new String[] { _contact.getContactNumber() });
Log.i(TAG, "Updating zname phonebook");
values = new ContentValues();
values.put(DBConstant.All_Contacts_Columns.COLUMN_CONTACT_ID,_contact.getContactId());
values.put(DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER,_contact.getContactNumber());
values.put(DBConstant.All_Contacts_Columns.COLUMN_DISPLAY_NAME,_contact.getContactName());
values.put(DBConstant.All_Contacts_Columns.COLUMN_ZNAME_DP_URL_SMALL,_contact.getContactPhotoUri().toString());
Zname.getApplication().getContentResolver().insert(DBConstant.All_Contacts_Columns.CONTENT_URI,values);
if (cursor != null)
cursor.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.