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

时间:2010-01-28 12:07:57

标签: android

我正在使用registerContentObserver()通知联系人已更改,但是当我注册内容uri:People.CONTENT_URI时,当我在日志中观察时,我收到的通知为“false “即使改变了联系方式。

我还将deliverSelfNotification重写为true。我做错了什么?

2 个答案:

答案 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);

你不会知道这种方法有什么变化。

相关问题