网上很多列子都没有考虑到群发的时候。找了很久才找到
http://www.cnblogs.com/yangzhong/archive/2012/05/16/2504152.html
主要步骤: 1、 获取短信会话列表 2、根据获取到的会话列表中的recipient_ids 信息去canonical_addresses 中获取对应的地址信息。 package com.xx.readsms; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class ReadSmsActivity extends Activity { /** Called when the activity is first created. */ private Context mContext; private TextView tv; private static List<ContactInfo> list=new ArrayList<ContactInfo>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv=(TextView)this.findViewById(R.id.tv_test); getSMSInfo(); tv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub list.clear(); System.out.println("=================1"); getContacts_LastMessage(); System.out.println("=================2"); StringBuilder sb=new StringBuilder(); if(list!=null){ System.out.println("=================3"); for (int i = 0; i < list.size(); i++) { System.out.println("=================4:"+i); ContactInfo tmp=new ContactInfo(); tmp=(ContactInfo)list.get(i); sb.append("["+tmp.getContact()+","); sb.append(tmp.getLast_mms()+","); sb.append(tmp.getDate_mms()+","); sb.append(getCanonicalAddresses(tmp.getRecipient())+",");//去canonical_addresses表获取接收者号码 sb.append(tmp.getFinal_count()+"]\n"); } tv.setText(""); tv.setText(sb.toString()); } else{ System.out.println("list is null"); } } }); } public String getCanonicalAddresses(String recipient_ids){ String[] ids=recipient_ids.split(" "); System.out.println("recipient_ids:"+recipient_ids); String addressResult=""; for (int i = 0; i < ids.length; i++) { Cursor cur=ReadSmsActivity.this.getContentResolver().query(Uri.parse("content://mms/"), new String[]{" * from canonical_addresses where _id="+ids[i].toString()+" --"}, null,null,null); if(cur.getCount()>0){ while (cur.moveToNext()){ String _id=cur.getString(cur.getColumnIndex("_id")); String address=cur.getString(cur.getColumnIndex("address")); addressResult+="{"+_id+","+address+"}"; } } } return addressResult; } /** * 从mms数据库中检索threads表 */ public void getContacts_LastMessage() { ContentResolver cr = ReadSmsActivity.this.getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://mms/"), new String[] { "* from threads--" }, null, null, null); while (cursor.moveToNext()) { int thread_id = cursor.getColumnIndex("_id"); int date = cursor.getColumnIndex("date"); int message_count = cursor.getColumnIndex("message_count"); int snippet = cursor.getColumnIndex("snippet"); int recipient=cursor.getColumnIndex("recipient_ids"); //格式化短信日期显示 SimpleDateFormat sfd = new SimpleDateFormat("MM-dd hh:mm:ss"); Date date_format = new Date(Long.parseLong(cursor.getString(date))); String time = sfd.format(date_format); //获得短信的各项内容 String info[]=getPhoneNum(cursor.getString(thread_id)); String last_mms=cursor.getString(snippet); String date_mms=time; String count_mms=cursor.getString(message_count); String recipient_ids=cursor.getString(recipient); //判断是否联系人 String contact = getContactNameFromPhoneNum(this.getApplicationContext(), info[0]); //获得最后的未读短信与已读短信 String final_count="("+info[1]+"/"+count_mms+")"; //添加到list if (contact.equals("")) { getData( info[0], last_mms, final_count, date_mms, recipient_ids ); } else { getData( contact, last_mms, final_count, date_mms, recipient_ids ); } } } /** * 获取联系人信息 * @param context * @param contactInfo * @return */ public String getContactNameFromPhoneNum(Context context,String contactInfo){ Long curPersonID; String contactNames = ""; Uri uri = Uri.parse("content://com.android.contacts/phone_lookup/" + contactInfo); Cursor cursor = getContentResolver().query(uri, null, null, null, null); if(cursor.moveToFirst()){ String contactName = cursor.getString(cursor.getColumnIndex("display_name")); curPersonID = cursor.getLong(cursor.getColumnIndex("_id")); cursor.close(); if(contactNames=="") contactNames = contactName; else contactNames = contactNames+","+contactName; } return contactNames; } /** * 添加到列表 * @param contact * @param last_mms * @param final_count * @param date_mms */ public void getData(String contact,String last_mms,String final_count,String date_mms,String recipient_ids){ ContactInfo c=new ContactInfo(); if(contact!=null) c.setContact(contact); if(date_mms!=null) c.setDate_mms(date_mms); if(final_count!=null) c.setFinal_count(final_count); if(last_mms!=null) c.setLast_mms(last_mms); if(recipient_ids!=null) c.setRecipient(recipient_ids); //System.out.println(contact+" "+date_mms); list.add(c); } /** * * @param 根据thread_id 检索sms库, 获得对应的号码 * @return */ public String[] getPhoneNum(String thread_id) { String PhoneNum=""; int noread_mms=0; String[] info={"",""}; String[] projection = new String[] { "thread_id", "address", "person", "body", "date", "type","read" }; Uri uri = Uri.parse("content://sms/"); ContentResolver cr = getContentResolver(); Cursor cursor = cr.query ( uri, projection, "thread_id=?", new String[] { thread_id } , null ); while (cursor.moveToNext()) { int phoneNumber = cursor.getColumnIndex("address"); int isread =cursor.getColumnIndex("read"); if (cursor.getString(isread).equals("0")) { noread_mms++; } PhoneNum=cursor.getString(phoneNumber); } info[0]=PhoneNum; info[1]=Integer.toString(noread_mms); return info; } }