2012-07-01 70 views
2

我試圖提取發送的短信。我知道這沒有BroadcastRecver。所以我發現我可以使用ContentObserver來監聽db中的更改。ContentObserver用於短信

我該如何執行此操作?我的目標是只得到新的SMS發送,並通過POST發送的DB

感謝

回答

1

下面是一個代碼片段來做到這一點。關鍵是要使用僅顯示「type =傳出消息」的選擇。

此外,由於內容數據庫可能被任何更改觸發,請跟蹤(以某種方式)已處理的內容。

int THREAD_ID = 0, ADDRESS = 1, DATE = 2, TYPE = 3, BODY = 4, INCOMING = 1, OUTGOING = 2, UNKNOWN = -1; 

String[] smsProjection = new String[] {"thread_id", "address", "date", "type", "body"}; 

ContentResolver cr = context.getContentResolver(); 

Cursor cursor = context.getContentResolver().query(uri, smsProjection, "type = ? AND date > ?",new String[]{Integer.toString(OUTGOING), Long.toString(lastOutgoingSmsTime)}, null); 
+0

Hi @PVS,你在哪裏得到lastOutgoingSmsTime的值? – midhunhk

+0

lastOutgoingSmsTime是一個應用程序變量,它定義了「新」對應用程序的意義。每次提取一組SMS時,只需更新下次查詢的時間戳即可。你將不得不第一次處理它。 – PVS

+0

明白了。當有消息發送時,我將messageId存儲爲偏好。那麼我比較messageIds來檢查它是否是新的。 – midhunhk