在Android中阅读短信

时间:2013-06-10 15:44:27

标签: android

Uri uri = Uri.parse( "content://sms/inbox" );

Cursor cursor = context.getContentResolver().query(
                            uri,
                  new String[] { "_id", "thread_id", "address", "person", "date", "body" },
                            null,
                            null,
                            SORT_ORDER);

在上面的代码中,例如,“body”是消息的内容,“address”是电话号码 那么什么是“_id”和“thread_id”?你能举个例子来支持解释吗?

2 个答案:

答案 0 :(得分:0)

像那样使用

Cursor cursor = getContentResolver().query(Uri.parse("content://sms/inbox"), null, null, null, null);
cursor.moveToFirst();

do{
   String msgData = "";
   for(int idx=0;idx<cursor.getColumnCount();idx++)
   {
       msgData += " " + cursor.getColumnName(idx) + ":" + cursor.getString(idx);
   }
}while(cursor.moveToNext());

请添加READ_SMS权限。

答案 1 :(得分:0)

在您在SMS内容提供商中查询的表中,_id是唯一的行ID号。它将随着每个消息(发送或接收)递增,这是该会话线程的一部分。 thread_id是发件人和收件人之间的会话线程的数字ID;在“messages”表和内容提供程序中的“threads”表之间执行数据库连接时,将使用此数字。

消息交换示例:

Sender: Hello 1   (_id = 1)
Recipient: Foo    (_id = 2)
Sender: Hello 2   (_id = 3)
Recipient: Bar    (_id = 4)

对于以上所有thread_id = 1,并且在会话线程表中,将有一个条目用于“发件人”和“收件人”之间的对话。当对话线程显示在应用程序中时,它将在消息表(上面的URI)和线程表之间进行数据库表连接,以仅显示该线程。

这有帮助吗?