【发布时间】:2011-08-25 05:05:05
【问题描述】:
我能够收到“联系人数据库发生更改”的一般通知,但我想知道插入、更新或删除的特定记录。以下是注册并获取 onChange 通知的代码。不幸的是,这不是具体的,这使我的处理详尽且效率低下。
这里是代码存根:
if ((mNativeContactsObserver == null) && (mHandler == null)) {
mHandler = new Handler(this.getMainLooper()) {
};
mNativeContactsObserver = new ContentObserver(mHandler) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Bundle data = null;
Message message = mHandler.obtainMessage();
if (message != null) {
data = message.getData();
if (data != null) {
Logs.d(TAG, "Message = [" + message.toString() + "] data=[" + data.toString() + "]");
Logs.d(TAG, "Contents = [" + message.describeContents() + "]");
}
}
if (!selfChange) {
final Account accountListen = MySyncAdapter.lookupAccount(TAG, getApplicationContext(), getUserProfile().getAccountId(), AUTHORITY_MY_SYNC);
Logs.d(TAG, "onChange!? account: " + accountListen.name);
if (!ContentResolver.isSyncPending(account, ContactsContract.AUTHORITY)
&& (!ContentResolver.isSyncActive(account, ContactsContract.AUTHORITY))) {
Bundle extras = new Bundle();
extras.putInt(MySyncAdapter.EXTRA_SYNC_TYPE, MySyncAdapter.REQUEST_SYNC_NATIVE_CHANGED);
ContentResolver.requestSync(accountListen, ContactsContract.AUTHORITY, extras);
} else {
Logs.w(TAG, "There is a pending sync. This request is ignored.");
}
}
}
};
}
Uri uriContactsListen = ContactsContract.Contacts.CONTENT_URI.buildUpon().appendEncodedPath("#").build();
Logs.i(TAG, "Register listening for native contacts changes. [" + uriContactsListen + "]");
cr.registerContentObserver(uriContactsListen, true, mNativeContactsObserver);
【问题讨论】:
-
您是否了解如何检测 ContactsContract 添加或删除或何时显式更新?即使我希望仅在删除记录时通知我的 ContentObserver。不是每次
-
很遗憾没有,但是自从 Eclair 之后我就没有再追求了。
-
嗨,你有解决办法吗?我希望在我的项目中获得相同的结果。
-
@BhoomiZalavadiya 不幸的是,没有。我只是把如果关闭作为一个限制,然后再也不回头了。
标签: android crud contactscontract contentobserver