我有一个ContentObserver用于手机上发送/接收的所有短信,当发送短信时,这是我从光标获得的数据:
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
现在,从这些数据我可以得到短信的消息,发送的时间,但我不明白我将如何获得收件人。有人可以帮帮我吗?谢谢!
答案 0 :(得分:1)
前一段时间here回答了这个问题。 (为方便起见而复制)。
“content:// sms /”未正式记录,它的实现取决于设备制造商。没有干净的方法来检索任何与短信相关的信息。
答案 1 :(得分:1)
对于任何支持内容的手机的解决方案:// sms,(不确定哪些不支持,但大多数都支持),是检查“地址”是否为空,如果不是null ,还检查消息的最后一次检查“_id”是否不同,因为content:// sms有时会给你相同的消息3-4次,并且只有其中一个有“地址”作为实际值而不是空值。这是我的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;
}