-2

我有一个 ContentObserver 用于手机上发送/接收的所有 SMS,当发送 SMS 时,这是我从光标获得的数据:

01-09 09:52:13.523: I/WOWOW(1830): _id: 213
01-09 09:52:13.523: I/WOWOW(1830): thread_id: 1
01-09 09:52:13.523: I/WOWOW(1830): address: null
01-09 09:52:13.523: I/WOWOW(1830): person: null
01-09 09:52:13.523: I/WOWOW(1830): date: 1326120733305
01-09 09:52:13.523: I/WOWOW(1830): date_sent: 0
01-09 09:52:13.523: I/WOWOW(1830): protocol: null
01-09 09:52:13.527: I/WOWOW(1830): read: 1
01-09 09:52:13.527: I/WOWOW(1830): status: -1
01-09 09:52:13.527: I/WOWOW(1830): type: 3
01-09 09:52:13.527: I/WOWOW(1830): reply_path_present: null
01-09 09:52:13.527: I/WOWOW(1830): subject: null
01-09 09:52:13.527: I/WOWOW(1830): body: Hello i am testing
01-09 09:52:13.527: I/WOWOW(1830): service_center: null
01-09 09:52:13.527: I/WOWOW(1830): locked: 0
01-09 09:52:13.527: I/WOWOW(1830): error_code: 0
01-09 09:52:13.527: I/WOWOW(1830): seen: 0

现在,从这些数据中我可以得到短信的信息,它的发送时间,但我不明白我将如何获得收件人。有人可以帮我吗?谢谢!

4

2 回答 2

1

这个问题不久前在这里得到了回答。(为方便起见复制)。

“content://sms/”没有正式记录,它的实现取决于设备制造商。没有干净的方法可以检索任何与短信相关的信息。

于 2012-01-09T15:33:58.960 回答
1

对于任何支持 content://sms 的电话(不确定哪个不支持,但大多数支持),对此的解决方案是检查“地址”是否不为空,如果它不为空,还要检查如果最后检查的消息的“_id”不同,因为 content://sms 有时会给您相同的消息 3-4 次,并且其中只有一个具有“地址”作为实际值而不是 null。这是我在 ContentObserver onChange 中的最终代码:

Cursor cur = contentResolver.query(Uri.parse("content://sms"), null, null, null, null);
    cur.moveToNext();
    String id = cur.getString(cur.getColumnIndex("_id"));

    final String user_id = settings.getString("user_id", "0");

    if(!cur.getString(cur.getColumnIndex("address")).equals("null") && !id.equals(lastId)) {
        for(int i =0; i < cur.getColumnNames().length; i++) {
            Log.i("WOWOW", cur.getColumnName(i) + ": " + cur.getString(cur.getColumnIndex(cur.getColumnName(i))));
        }
        Log.i("WOWOW", "*****************************************************");
        lastId = id;
    }
于 2012-01-09T22:20:18.207 回答