思路:查询文本彩信 首先查询threads表,获取会话的thread_id,recipient_ids。 1.通过thread_id可以查询pdu表,获取part的mid,通过mid来查询part表获取文本彩信的内容text.
2.recipient_ids 群发会话的话,会存在多个canonical_addresses表的_id,其中_id在recipient_ids列中是用空格分隔的。 通过分割获取多个_id,再查询canonical_addresses表获取群发会话的多个联系人的address.
2.recipient_ids 群发会话的话,会存在多个canonical_addresses表的_id,其中_id在recipient_ids列中是用空格分隔的。 通过分割获取多个_id,再查询canonical_addresses表获取群发会话的多个联系人的address.
public void DoQueryMassChatListFromThreadId(String threadId)
{
ArrayList<ChatMessage> lists =new ArrayList<ChatMessage>();
final String pdu_uri ="content://mms";
Cursor cursor =getContentResolver().query(Uri.parse(pdu_uri), null, "thread_id = ?", new String[] { threadId }, null);
if(cursor!=null &&cursor.getCount()>0)
{
String [] temp=cursor.getColumnNames(); //获取该表格的所有列名
while(cursor.moveToNext())
{
ChatMessage chat =new ChatMessage();
String _id =cursor.getString(cursor.getColumnIndex("_id"));
String thread_id =cursor.getString(cursor.getColumnIndex("thread_id"));
String date =cursor.getString(cursor.getColumnIndex("date"));
chat.id =_id;
chat.threadId =thread_id;
chat.date =date;
lists.add(chat);
}
}
//查询part表
for(int i =0;i<lists.size();i++)
{
ChatMessage ii =lists.get(i);
Cursor part_cursor =getContentResolver().query(Uri.parse("content://mms/part/"), null, "mid = ?", new String[] { ii.id }, null);
if(part_cursor!=null &&part_cursor.getCount()>0)
{
while(part_cursor.moveToNext())
{
String mid =part_cursor.getString(part_cursor.getColumnIndex("mid"));
String cid =part_cursor.getString(part_cursor.getColumnIndex("cid"));
String body ="";
if(cid.equalsIgnoreCase("<text_0>"))
{
body =part_cursor.getString(part_cursor.getColumnIndex("text"));
ChatMessage chat =FindChatMesageBodyByPartMid(lists,mid);
chat.body =body;
}
Log.i("mid:", mid+" "+"text:"+body);
}
}
}
}
public ChatMessage FindChatMesageBodyByPartMid(ArrayList<ChatMessage> chats,String mid)
{
ChatMessage chat =null;
for(int i =0;i<chats.size();i++)
{
ChatMessage ii =chats.get(i);
if(ii.id.equalsIgnoreCase(mid))
{
chat =ii;
break;
}
}
return chat;
}