2010-01-28 102 views

回答

2

不确定你问什么,你的问题有点含糊。

这里是我听出来的短信内容提供商的变化,你会发现它有用

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); 
    } 

} 
+0

O.k我会更清楚: 我有自己的地址簿应用程序对此我获取联系人姓名和联系电话使用接触内容提供商形成本地地址簿。 所以我的问题是: 1)如何为我的应用程序时,一个特定人的联系人姓名或联系电话在本地地址簿 2)我怎么知道发生变化的通知,其在本土领域地址簿已被更改。 谢谢 – warrior 2010-01-29 09:09:39

+0

super.onChange(arg0);非常重要! – herbertD 2012-06-26 09:11:38

+0

我也面临与@warrior同样的问题。如果找到的解决方案与我分享[email protected] – user915267 2012-11-01 04:49:31

1

如果你是针对什么比API级别3, 更新你应该使用ContactsContract.Contacts.CONTENT_URI

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

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

+0

如何知道“发生了什么变化”? – 2012-06-10 20:45:11