package com.sogouchat.smsmms; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import org.w3c.dom.smil.SMILDocument; import org.w3c.dom.smil.SMILElement; import org.xml.sax.SAXException; import com.sogouchat.smil.parser.SmilXmlParser; //import Sogou.Smart.smartsms.dom.smil.parser.SmilXmlParser; import android.R.bool; import android.R.integer; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.ContactsContract.Contacts; import android.util.Log; import android.webkit.WebChromeClient.CustomViewCallback; public class SmsMgr { public static final String URI_Thread = "content://mms-sms/threadID"; public static final String URI_Con = "content://mms-sms/conversations"; private static SmsMgr s_lpthis = new SmsMgr(); private static final String TAG = "SmsMgr"; public static SmsMgr GetI(){ return s_lpthis; } private Context context; public SmsMgr(){ } public void LoadAll(){ m_SmsList.clear(); m_SmsContactsList.clear(); m_SmsNewList.clear(); m_SmsMap.clear(); Load(); LoadMms(); LoadUnReadSMS(); LoadUnReadMMS(); SortSmsTotal(m_SmsList); SortSmsTotal(m_SmsContactsList); ParseNewMessageList(); } public void Init(Context context){ this.context = context; m_SmsList = new Vector<SmsTotal>(); m_SmsContactsList = new Vector<SmsTotal>(); m_SmsNewList = new Vector<SmsTotal>(); m_SmsMap = new HashMap<Integer, SmsTotal>(); //LoadTest(); // Load(); // LoadMms(); // SortSmsTotal(m_SmsList); // SortSmsTotal(m_SmsContactsList); //LoadAll(); Log.i(TAG,"smsListCount:"+m_SmsList.size()); } public void LoadTest(){ ContentResolver cr = context.getContentResolver(); Uri uri = Uri.parse(URI_Con); Cursor cursor = cr.query(uri, null, null, null, null); int nColumnCount = cursor.getColumnCount(); for (int i = 0; i < nColumnCount; i++) { Log.i(TAG, ""+i+" "+cursor.getColumnName(i)); } int j= 0; while (cursor.moveToNext()) { String strText=""; for (int i = 0; i < nColumnCount; i++) { //Log.i(TAG, ""+j+":"+i+" "+cursor.getString(i)); strText +=i; strText += cursor.getString(i); strText +=" "; } Log.i(TAG, j+":"+" "+strText); j++; //break; } } class SmsTotalCompa implements Comparator<SmsTotal>{ public int compare(SmsTotal lhs, SmsTotal rhs) { // TODO Auto-generated method stub if (lhs.tmDate<rhs.tmDate) { return 1; }else if (lhs.tmDate==rhs.tmDate) { return 0; } else { return -1; } } } class SmsCompa implements Comparator<Sms>{ public int compare(Sms lhs, Sms rhs) { // TODO Auto-generated method stub if (lhs.tmDate>rhs.tmDate) { return 1; }else if (lhs.tmDate==rhs.tmDate) { return 0; } else { return -1; } } } public void LoadContactsByThreadID(int nThreadID){ try{ ContentResolver cr = context.getContentResolver(); // String[] projection = new String[]{"_id", "address", "person", // "body", "date", "type","thread_id"}; String[] projection = new String[]{MmsBase.ID, MmsBase.THREAD_ID, MmsBase.DATE, MmsBase.SUBJECT,"Count(*)",MmsBase.TYPE}; Uri uri = Uri.parse(MmsBase.MMS_URI_ALL); String selection = "_id"; //selection = null; Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE); if (cur.moveToFirst()) { } else { } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void ParseNewMessageList(){ for (SmsTotal smsTotal : m_SmsList) { if (smsTotal.nUnReadCount>0) { m_SmsNewList.add(smsTotal); } } SortSmsTotal(m_SmsNewList); } public void LoadMms(){ try{ ContentResolver cr = context.getContentResolver(); // String[] projection = new String[]{"_id", "address", "person", // "body", "date", "type","thread_id"}; String[] projection = new String[]{MmsBase.ID, MmsBase.THREAD_ID, MmsBase.DATE, MmsBase.SUBJECT,"Count(*)",MmsBase.TYPE,MmsBase.READ}; Uri uri = Uri.parse(MmsBase.MMS_URI_ALL); String selection = "1=1) group by "+MmsBase.THREAD_ID+" -- ("; //selection = null; Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE); if (cur.moveToFirst()) { String name; String phoneNumber=""; String smsbody; //int type; long tmDate; int nThreadID; int nCount = 0; int nID = 0; String subject=""; String strFix = ""; int nRead = 0; boolean bRead = true; int idColumn = cur.getColumnIndex(MmsBase.ID); int threadidColumn = cur.getColumnIndex(MmsBase.THREAD_ID); int dateColumn = cur.getColumnIndex(MmsBase.DATE); int subjectColumn = cur.getColumnIndex(MmsBase.SUBJECT); int typeColumn = cur.getColumnIndex(MmsBase.TYPE); int readColumn = cur.getColumnIndex(MmsBase.READ); //int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID); do{ subject = cur.getString(subjectColumn); String str=""; if (subject!=null) { try { str=new String(subject.getBytes("ISO8859_1"),"utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } subject = str; nRead = cur.getInt(readColumn); if (nRead== SmsBase.Sms_Read_On) { bRead = true; }else { bRead = false; } //phoneNumber = cur.getString(phoneNumberColumn); // smsbody = cur.getString(smsbodyColumn); tmDate = Long.parseLong(cur.getString(dateColumn)); tmDate*=1000; nThreadID = Integer.parseInt(cur.getString(threadidColumn)); nID =cur.getInt(idColumn); int typeId = cur.getInt(typeColumn); //type = typeId; nCount = cur.getInt(4); Cursor cAddr = null; Cursor cPhones = null; try { //��ݲ���id��addr���в�������˵绰���룬�������msg_idӳ��pdu���id�� String selectionAdd = new String("msg_id=" + nID ); Uri uriAddr = Uri.parse("content://mms/" + nID + "/addr"); //Uri uriAddr = Uri.parse("content://mms/addr"); cAddr = cr.query(uriAddr, null, selectionAdd, null, null); //���addr���еĵ绰������phones���в��PERSON_ID,���PERSON_IDӳ��people���е�_id if(cAddr.moveToFirst()){//�ô���õ�2����¼����һ����¼Ϊ�����˺��룬�ڶ���Ϊ������� if (typeId == MmsBase.MESSAGE_BOX_SENT) { cAddr.moveToNext(); } int nAddrColumn = cAddr.getColumnIndex("address"); phoneNumber= cAddr.getString(nAddrColumn); } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } SmsTotal mSms =null; mSms = FindItemByThreadID(nThreadID); if (mSms==null) { mSms = new SmsTotal(null,phoneNumber, subject, tmDate, typeId,nThreadID,nCount,bRead); mSms.bHasMms = true; mSms.nMmsCount = nCount; if (!bRead) { mSms.bHasMmsUnRead =true; } AddItem(mSms); }else { if (!bRead) { mSms.bHasMmsUnRead =true; } mSms.AddMmsCount(nCount,tmDate,subject,bRead); } }while(cur.moveToNext()); } else { } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void Load(){ try{ ContentResolver cr = context.getContentResolver(); // String[] projection = new String[]{"_id", "address", "person", // "body", "date", "type","thread_id"}; String[] projection = new String[]{SmsBase.SMS_ID, SmsBase.SMS_ADDRESS, SmsBase.SMS_PERSON, SmsBase.SMS_BODY, SmsBase.SMS_DATE, SmsBase.SMS_TYPE,SmsBase.SMS_THREAD_ID,"Count(*)",SmsBase.SMS_READ}; Uri uri = Uri.parse(SmsBase.SMS_URI_ALL); String selection = "1=1) group by "+SmsBase.SMS_THREAD_ID+" -- ("; //selection = null; Cursor cur = cr.query(uri, projection, selection, null,SmsBase.SMS_DATE); if (cur.moveToFirst()) { String name; String phoneNumber; String smsbody; int type; long tmDate; int nThreadID; int nCount = 0; int nRead = 0; boolean bRead = true; int nameColumn = cur.getColumnIndex(SmsBase.SMS_PERSON); int phoneNumberColumn = cur.getColumnIndex(SmsBase.SMS_ADDRESS); int smsbodyColumn = cur.getColumnIndex(SmsBase.SMS_BODY); int dateColumn = cur.getColumnIndex(SmsBase.SMS_DATE); int typeColumn = cur.getColumnIndex(SmsBase.SMS_TYPE); int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID); int readColumu = cur.getColumnIndex(SmsBase.SMS_READ); do{ name = cur.getString(nameColumn); phoneNumber = cur.getString(phoneNumberColumn); smsbody = cur.getString(smsbodyColumn); tmDate = Long.parseLong(cur.getString(dateColumn)); nThreadID = Integer.parseInt(cur.getString(threadidColumn)); int typeId = cur.getInt(typeColumn); type = typeId; nCount = cur.getInt(7); nRead = cur.getInt(readColumu); if (nRead== SmsBase.Sms_Read_On) { bRead = true; }else { bRead = false; } if(smsbody == null) smsbody = ""; SmsTotal mSms = new SmsTotal(name, phoneNumber, smsbody, tmDate, type,nThreadID,nCount,bRead); if (!bRead) { mSms.bHasSmsUnRead =true; } AddItem(mSms); //m_SmsList.add(mSms); //m_SmsMap.put(nThreadID, mSms); }while(cur.moveToNext()); } else { } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void LoadUnReadSMS(){ try{ ContentResolver cr = context.getContentResolver(); String[] projection = new String[]{SmsBase.SMS_THREAD_ID,"Count(*)"}; Uri uri = Uri.parse(SmsBase.SMS_URI_ALL); String selection = SmsBase.SMS_READ+"=0 "+") group by "+SmsBase.SMS_THREAD_ID+" -- ("; Cursor cur = cr.query(uri, projection, selection, null,SmsBase.SMS_DATE); int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID); if (cur.moveToFirst()) { int nThreadID; int nCount = 0; do{ nThreadID = Integer.parseInt(cur.getString(threadidColumn)); nCount = cur.getInt(1); SmsTotal mSmsTotal =null; mSmsTotal = FindItemByThreadID(nThreadID); if (mSmsTotal!=null) { mSmsTotal.nUnReadSmsCount = nCount; mSmsTotal.nUnReadCount = nCount; } }while(cur.moveToNext()); } else { } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void LoadUnReadMMS(){ try{ ContentResolver cr = context.getContentResolver(); String[] projection = new String[]{ MmsBase.THREAD_ID,"Count(*)"}; Uri uri = Uri.parse(MmsBase.MMS_URI_ALL); String selection = MmsBase.READ+"=0) group by "+MmsBase.THREAD_ID+" -- ("; Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE); if (cur.moveToFirst()) { int nThreadID; int nCount = 0; int threadidColumn = cur.getColumnIndex(SmsBase.SMS_THREAD_ID); do{ nThreadID = Integer.parseInt(cur.getString(threadidColumn)); nCount = cur.getInt(1); SmsTotal mSmsTotal =null; mSmsTotal = FindItemByThreadID(nThreadID); if (mSmsTotal!=null) { mSmsTotal.nUnReadMmsCount = nCount; mSmsTotal.nUnReadCount += nCount; } }while(cur.moveToNext()); } else { } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void LoadSmsItemsByThreadID(int nThreadID,SmsTotal smsTotal){ try{ smsTotal.smsList.clear(); ContentResolver cr = context.getContentResolver(); // String[] projection = new String[]{"_id", "address", "person", // "body", "date", "type","thread_id"}; String[] projection = new String[]{SmsBase.SMS_ID, SmsBase.SMS_ADDRESS, SmsBase.SMS_PERSON, SmsBase.SMS_BODY, SmsBase.SMS_DATE, SmsBase.SMS_TYPE}; Uri uri = Uri.parse(SmsBase.SMS_URI_ALL); String selection = SmsBase.SMS_THREAD_ID+" == "+nThreadID; //String[] stringArgsString={""+nThreadID}; //selection = null; Cursor cur = cr.query(uri, projection, selection, null, SmsBase.SMS_DATE); if (cur.moveToFirst()) { String name; String phoneNumber; String smsbody; int type; long tmDate; int nID; int nIDColumn = cur.getColumnIndex(SmsBase.SMS_ID); int nameColumn = cur.getColumnIndex(SmsBase.SMS_PERSON); int phoneNumberColumn = cur.getColumnIndex(SmsBase.SMS_ADDRESS); int smsbodyColumn = cur.getColumnIndex(SmsBase.SMS_BODY); int dateColumn = cur.getColumnIndex(SmsBase.SMS_DATE); int typeColumn = cur.getColumnIndex(SmsBase.SMS_TYPE); do{ nID = cur.getInt(nIDColumn); name = cur.getString(nameColumn); phoneNumber = cur.getString(phoneNumberColumn); smsbody = cur.getString(smsbodyColumn); tmDate = Long.parseLong(cur.getString(dateColumn)); int typeId = cur.getInt(typeColumn); type = typeId; if(smsbody == null) smsbody = ""; Sms mSms = new Sms(name, phoneNumber, smsbody, tmDate, type,nThreadID,nID); smsTotal.add(mSms); }while(cur.moveToNext()); } else { } if (cur!=null) { cur.close(); } } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } if (smsTotal.bHasMms) { LoadMmsItemsByThreadID(nThreadID, smsTotal); SortSms(smsTotal.smsList); } } public void LoadMmsItemsByThreadID(int nThreadID,SmsTotal smsTotal){ try{ ContentResolver cr = context.getContentResolver(); String[] projection = new String[]{MmsBase.ID, MmsBase.DATE, MmsBase.SUBJECT,MmsBase.TYPE}; Uri uri = Uri.parse(MmsBase.MMS_URI_ALL); String selection = MmsBase.THREAD_ID+" == "+nThreadID; Cursor cur = cr.query(uri, projection, selection, null,MmsBase.DATE); int nShows = 0; if (cur.moveToFirst()) { String name=""; String phoneNumber=""; int type; long tmDate; int nID = 0; String subject=""; int idColumn = cur.getColumnIndex(MmsBase.ID); int dateColumn = cur.getColumnIndex(MmsBase.DATE); int subjectColumn = cur.getColumnIndex(MmsBase.SUBJECT); int typeColumn = cur.getColumnIndex(MmsBase.TYPE); do{ subject = cur.getString(subjectColumn); String str=""; if (subject!=null) { try { str=new String(subject.getBytes("ISO8859_1"),"utf-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } subject = str; tmDate = Long.parseLong(cur.getString(dateColumn)); tmDate*=1000; nID =cur.getInt(idColumn); type = cur.getInt(typeColumn); Cursor cAddr = null; //Cursor cPhones = null; // try { // //��ݲ���id��addr���в�������˵绰���룬�������msg_idӳ��pdu���id�� // String selectionAdd = new String("msg_id=" + nID ); // Uri uriAddr = Uri.parse("content://mms/" + nID + "/addr"); // //Uri uriAddr = Uri.parse("content://mms/addr"); // cAddr = cr.query(uriAddr, null, selectionAdd, null, null); // //���addr���еĵ绰������phones���в��PERSON_ID,���PERSON_IDӳ��people���е�_id // // if(cAddr.moveToFirst()){//�ô���õ�2����¼����һ����¼Ϊ�����˺��룬�ڶ���Ϊ������� // if (type == MmsBase.MESSAGE_BOX_SENT) { // cAddr.moveToNext(); // } // int nAddrColumn = cAddr.getColumnIndex("address"); // phoneNumber= cAddr.getString(nAddrColumn); // } // if (cAddr!=null) { // cAddr.close(); // } // } catch(SQLiteException ex) { // Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); // } Mms mms = new Mms(name, smsTotal.phoneNumber, subject, tmDate, type, nThreadID,nID); int nMssCount = smsTotal.nMmsCount; mms.nPartID = nID; // if (nMssCount<=3) { // GetMMSPart(mms, nID); // }else if(nShows>(nMssCount-4) && nShows>=0) { // GetMMSPart(mms, nID); // } // if ((nShows>(smsTotal.nMmsCount-4)) && nShows>=0) { // // GetMMSPart(mms, nID); // } // else { // GetMMSPart(mms, nID); // } nShows++; smsTotal.add(mms); }while(cur.moveToNext()); } else { } cur.close(); } catch(SQLiteException ex) { Log.d("SQLiteException in getSmsInPhone", ex.getMessage()); } } public void GetMMsPartItem(SmsTotal smsTotal,int nPartID){ GetMMSPart(smsTotal.GetMMsByID(nPartID), nPartID); } public void GetMMSPart(Mms mms,int nID){ String selectionPart = new String("mid="+nID);//part���е�mid���Ϊpdu���е�_id Uri uri = Uri.parse(MmsBase.MMS_URI_PART); Cursor cPart = context.getContentResolver().query(uri, null,selectionPart,null, null); int nTypeColm = cPart.getColumnIndex(MmsBase.PART_TYPE); int nNameColm = cPart.getColumnIndex(MmsBase.PART_NAME_INSMIL); int nTextColm = cPart.getColumnIndex(MmsBase.PART_TEXT); int nSubID = cPart.getColumnIndex(MmsBase.ID); String Type; int nType; String name; String text; String SubID; while (cPart.moveToNext()) { Type = cPart.getString(nTypeColm); name = cPart.getString(nNameColm); text = cPart.getString(nTextColm); SubID = cPart.getString(nSubID); if (Type.equals(MmsBase.STR_PART_TYPE_SMIL)) { nType = MmsBase.PART_TYPE_SMIL; ParseSmil(mms,text); }else if (Type.equals(MmsBase.STR_PART_TYPE_TEXT)) { nType = MmsBase.PART_TYPE_TEXT; if (text==null) { String strText = GetMMSText(SubID); } mms.Add(new MmsPart(nType, name, text, null)); }else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_BMP)){ nType = MmsBase.PART_TYPE_IMAGE_BMP; Bitmap bitmap = GetMMSImage(SubID); mms.Add(new MmsPart(nType, name, text, bitmap)); }else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_JPG)){ nType = MmsBase.PART_TYPE_IMAGE_JPG; Bitmap bitmap = GetMMSImage(SubID); mms.Add(new MmsPart(nType, name, text, bitmap)); }else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_GIF)){ nType = MmsBase.PART_TYPE_IMAGE_GIF; Bitmap bitmap = GetMMSImage(SubID); mms.Add(new MmsPart(nType, name, text, bitmap)); }else if (Type.equals(MmsBase.STR_PART_TYPE_IMAGE_ALL)){ nType = MmsBase.PART_TYPE_IMAGE_ALL; Bitmap bitmap = GetMMSImage(SubID); mms.Add(new MmsPart(nType, name, text, bitmap)); }else { nType = MmsBase.PART_TYPE_ERROR; } switch (nType) { case MmsBase.PART_TYPE_SMIL: break; case MmsBase.PART_TYPE_IMAGE_BMP: case MmsBase.PART_TYPE_IMAGE_JPG: case MmsBase.PART_TYPE_IMAGE_ALL: break; case MmsBase.PART_TYPE_IMAGE_GIF: break; default: break; } //break; } if (cPart!=null) { cPart.close(); } mms.bLoad=true; } public InputStream String2InputStream(String str){ ByteArrayInputStream stream = new ByteArrayInputStream(str.getBytes()); return stream; } public void ParseSmil(Mms mms,String strDate){ InputStream is = null; is = String2InputStream(strDate); try { if(is!=null){ SmilXmlParser parser = new SmilXmlParser(); SMILDocument document; try { document = parser.parse(is); if (document!=null) { SMILElement element = document.getHead(); mms.smil = document; } } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }catch (IOException e) { e.printStackTrace(); Log.v(TAG, "��ȡ�����쳣"+e.getMessage()); }finally{ if (is != null){ try { is.close(); }catch (IOException e){ Log.v(TAG, "��ȡ�����쳣"+e.getMessage()); } } } } public Bitmap GetMMSImage(String _id){ Uri partURI = Uri.parse("content://mms/part/" + _id ); ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream is = null; Bitmap bitmap=null; try { is = context.getContentResolver().openInputStream(partURI); byte[] buffer = new byte[256]; int len = -1; while ((len = is.read(buffer)) != -1) { baos.write(buffer, 0, len); } bitmap = BitmapFactory.decodeByteArray(baos.toByteArray(), 0, baos.toByteArray().length); }catch (IOException e) { e.printStackTrace(); Log.v(TAG, "��ȡͼƬ�쳣"+e.getMessage()); }finally{ if (is != null){ try { is.close(); }catch (IOException e){ Log.v(TAG, "��ȡͼƬ�쳣"+e.getMessage()); } } } return bitmap; } public String GetMMSText(String _id){ Uri partURI = Uri.parse("content://mms/part/" + _id ); InputStream is = null; StringBuilder sb = new StringBuilder(); try { is = context.getContentResolver().openInputStream(partURI); if(is!=null){ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); String temp = reader.readLine(); while (temp != null) { sb.append(temp); temp=reader.readLine();//�����Ͽ����ܶ��InputStreamת��string�����£�û����ؼ��һ�䣬����ǧ��һ�ɵĸ���ճ��ô����������Ļ��ǻ��ڴ������ } } }catch (IOException e) { e.printStackTrace(); Log.v(TAG, "��ȡ�����쳣"+e.getMessage()); }finally{ if (is != null){ try { is.close(); }catch (IOException e){ Log.v(TAG, "��ȡ�����쳣"+e.getMessage()); } } } return sb.toString(); } public void SortSmsTotal(Vector<SmsTotal> list){ SmsTotalCompa compa = new SmsTotalCompa(); Collections.sort(list, compa); } public void SortSms(Vector<Sms> list){ SmsCompa compa = new SmsCompa(); Collections.sort(list, compa); } public SmsTotal GetSmsTotalByID(int nID){ SmsTotal smsTotal = null; for (int i = 0; i < m_SmsList.size(); i++) { smsTotal = m_SmsList.get(i); if (smsTotal!=null) { if (smsTotal.threadID == nID) { return smsTotal; } } } return null; } public SmsTotal GetSmsTotalByName(String str){ SmsTotal smsTotal = null; for (int i = 0; i < m_SmsList.size(); i++) { smsTotal = m_SmsList.get(i); if (smsTotal!=null) { if (smsTotal.sContactName!=null && smsTotal.sContactName.equals(str)) { return smsTotal; } } } return null; } public SmsTotal GetSmsTotalByNumber(String strNumber){ String strFix=""; if (strNumber.length()>3) { if (strNumber.substring(0,3).equals("+86")) { strFix = strNumber.substring(3); }; } SmsTotal smsTotal = null; for (int i = 0; i < m_SmsList.size(); i++) { smsTotal = m_SmsList.get(i); if (smsTotal!=null) { if (smsTotal.phoneNumber.equals(strFix)|| smsTotal.phoneNumber.equals(strNumber)) { return smsTotal; } } } return null; } private void AddItem(SmsTotal smsTotal){ m_SmsList.add(smsTotal); m_SmsMap.put(smsTotal.threadID, smsTotal); if (smsTotal.sContactName!=null) { m_SmsContactsList.add(smsTotal); } } private SmsTotal FindItemByThreadID(int nThreadID){ return m_SmsMap.get(nThreadID); } public Vector<SmsTotal> m_SmsList; public Vector<SmsTotal> m_SmsContactsList; public Vector<SmsTotal> m_SmsNewList; private Map<Integer, SmsTotal> m_SmsMap; }