android 群发会话中获取联系人列表

主要步骤:

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--" },  nullnullnull);
         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,  nullnullnullnull);  
         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;                
    }

你可能感兴趣的:(android)