我使用registerContentObserver()
在联系人更改时收到通知,但是当我注册内容uri:People.CONTENT_URI
并且当我在log cat中观察时,我即使在更改联系人后也会将通知视为“错误”。Android:使用registerContentObserver()在联系人更改时收到通知
我也重写了deliverSelfNotification
为true。我究竟做错了什么?
我使用registerContentObserver()
在联系人更改时收到通知,但是当我注册内容uri:People.CONTENT_URI
并且当我在log cat中观察时,我即使在更改联系人后也会将通知视为“错误”。Android:使用registerContentObserver()在联系人更改时收到通知
我也重写了deliverSelfNotification
为true。我究竟做错了什么?
不确定你问什么,你的问题有点含糊。
这里是我听出来的短信内容提供商的变化,你会发现它有用
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级别3, 更新你应该使用ContactsContract.Contacts.CONTENT_URI。
然后它只是一个问题:getContentResolver()。registerContentObserver(ContactsContract.Contacts.CONTENT_URI,true,contentObserver);
虽然你不知道这个方法有什么改变。
如何知道“发生了什么变化”? – 2012-06-10 20:45:11
O.k我会更清楚: 我有自己的地址簿应用程序对此我获取联系人姓名和联系电话使用接触内容提供商形成本地地址簿。 所以我的问题是: 1)如何为我的应用程序时,一个特定人的联系人姓名或联系电话在本地地址簿 2)我怎么知道发生变化的通知,其在本土领域地址簿已被更改。 谢谢 – warrior 2010-01-29 09:09:39
super.onChange(arg0);非常重要! – herbertD 2012-06-26 09:11:38
我也面临与@warrior同样的问题。如果找到的解决方案与我分享[email protected] – user915267 2012-11-01 04:49:31