2009-08-17 98 views
3

如何註冊SMS數據庫更改?如何註冊SMS數據庫更改?

我想:

mCursor = mActivity.getContentResolver().query(Sms.CONTENT_URI, new String[] { 
      Sms.ADDRESS 
    }, null, null, null); 
mCursor.registerDataSetObserver(mydataSetObserver); 

其中mydataSetObserver實現這樣的:

private class MyDataSetObserver extends DataSetObserver { 
     public void onChanged() { 
      System.out.println ("1"); 
     } 
     public void onInvalidated() { 
      System.out.println ("2"); 
     } 
} 

但是,當我試圖發送在模擬器SMS消息, MyDataSetObserver永遠不會被調用。

你能告訴我爲什麼嗎?

謝謝。

回答

3

聽起來你所要做的只是能夠更改設備上的SMS數據庫。

我過去的做法是在AndroidManifest.xml中使用標籤。我所做的應用程序需要使用READ_SMS權限以及READ_CONTACTS權限,但是獲得寫入數據庫的權限將以相同的方式完成。

我定義在AndroidManifest.xml這些所需的權限與下面的標記文件:

包括在list of permissions你可以使用是WRITE_SMS,這應該給你想要的功能。

請注意:因爲我是一個新用戶,StackOverflow只會讓我發佈一個超鏈接,我試圖包括更多的信息,但無法這樣做。請轉到android開發者網站並搜索AndroidManifest.xml文件,並查看是否需要更多信息。

1

DataSetObserver s僅觀察DataSetObservable s他們註冊。您的MyDataSetObserver已在您的mCursor中註冊,並且在內容被另一個進程(如消息傳送應用程序)寫入時,將在mCursor發生變化時(例如在requery之後)通知而非

不幸的是,目前沒有好的方法來收聽發送的短信事件,最好的選擇似乎是輪詢content://sms/sent,可能使用ContentObserver

This問題是相關的。

+0

如何在閱讀短信時得到通知? 你是什麼意思'輪詢內容://短信/發送'? – n179911 2009-08-17 18:06:51

+0

通過輪詢我指的是短信內容提供商的頻繁閱讀和檢查(例如,使用計時器) – 2009-08-17 23:45:03