2012-07-01 49 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