我正在使用registerContentObserver()
通知联系人已更改,但是当我注册内容uri:People.CONTENT_URI
时,当我在日志中观察时,我收到的通知为“false “即使改变了联系方式。
我还将deliverSelfNotification
重写为true。我做错了什么?
答案 0 :(得分:2)
不确定你的问题,你的问题有点模糊。
以下是我如何收听SMS内容提供商的更改,您可能会发现它很有用
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);
}
}
答案 1 :(得分:1)
如果您定位的是比api级别3更高的任何内容, 你应该使用ContactsContract.Contacts.CONTENT_URI。
然后它只是一个问题:getContentResolver()。registerContentObserver(ContactsContract.Contacts.CONTENT_URI,true,contentObserver);
你不会知道这种方法有什么变化。