Android:使用registerContentObserver()在联系人更改时收到通知

我使用registerContentObserver()来通知联系人被更改,但是当我注册的内容uri:People.CONTENT_URI ,当我在日志猫观察,即使更改后,我得到的通知为“false”联系。

我也重写了deliverSelfNotification为真。 我究竟做错了什么?

Solutions Collecting From Web of "Android:使用registerContentObserver()在联系人更改时收到通知"

不知道你问什么,你的问题有点含糊。

这里是我如何听取短信内容提供商的变化,你可能会发现它是有用的

 String url = "content://sms/"; Uri uri = Uri.parse(url); getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); /uriSms = Uri.parse("content://sms/inbox"); Cursor c = getContentResolver().query(uriSms, null,null,null,null); //Log.d("COUNT", "Inbox count : " + c.getCount()); } class MyContentObserver extends ContentObserver { public MyContentObserver(Handler handler) { super(handler); } @Override public boolean deliverSelfNotifications() { return false; } @Override public void onChange(boolean arg0) { super.onChange(arg0); Log.v("SMS", "Notification on SMS observer"); Message msg = new Message(); msg.obj = "xxxxxxxxxx"; handler.sendMessage(msg); Uri uriSMSURI = Uri.parse("content://sms/"); Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null); cur.moveToNext(); String protocol = cur.getString(cur.getColumnIndex("protocol")); if(protocol == null){ Log.d("SMS", "SMS SEND"); int threadId = cur.getInt(cur.getColumnIndex("thread_id")); Log.d("SMS", "SMS SEND ID = " + threadId); getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null); } else{ Log.d("SMS", "SMS RECIEVE"); int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id")); getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); } } 

如果你的目标是比api level 3更新,你应该使用ContactsContract.Contacts.CONTENT_URI 。

然后它只是一个问题:getContentResolver()。registerContentObserver(ContactsContract.Contacts.CONTENT_URI,true,contentObserver);

你不会知道这个方法有什么改变。