2012-01-09 27 views
-2

我对发送的所有短信一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 

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

回答

1

对此的解决方案,对任何确实支持content:// sms的电话(不太确定哪一个不这样做,但大部分都是这样),是检查“address”是否为空,如果它不是空的,也检查消息的最后选中的“_id”是否不同,因为content:// sms有时会给你同样的消息3-4次,并且只有其中一个具有“address”作为真实值而不是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; 
    } 
+0

为了记录,lastId是一个公共全局变量,启动时等于“”。 – Qasim 2012-01-10 21:30:32

1

这个问题已经回答here。 (为了方便复制)。

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

+0

它是如何被downvoted?由于重复或?因为我认为它是一个涉及深入挖掘的好问题。线程ID究竟是什么? – Qasim 2012-01-09 21:42:21

+0

完成一些测试后,thread_id对于您发送消息的每个联系人都是唯一的。我会继续寻找解决方案。 – Qasim 2012-01-09 21:45:14

+0

经过更多测试后,我现在意识到“地址”字段有时为空,并且大部分时间实际上都包含一个地址。当您从手机发送传出短信时,地址就是短信的收件人。现在,我认为这是因为当SMS被放入:// sms中时,出于某种奇怪的原因它被放入多次,也许只有最后一次包含正确的信息。我会做更多的测试,这个问题将INDEED得到答案,你有我的话。 – Qasim 2012-01-09 21:50:15

相关问题