主要步骤:

1、 获取短信会话列表

2、根据获取到的会话列表中的recipient_ids信息去canonical_addresses 中获取对应的地址信息。

packagecom.xx.readsms;

importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;

importandroid.app.Activity;
importandroid.content.ContentResolver;
importandroid.content.Context;
importandroid.database.Cursor;
importandroid.net.Uri;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.TextView;

public classReadSmsActivity extendsActivity{
/** Calledwhentheactivityisfirstcreated. */
privateContextmContext;
privateTextViewtv;
private staticList<ContactInfo>list= newArrayList<ContactInfo>();
@Override
public voidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView) this.findViewById(R.id.tv_test);
getSMSInfo();
tv.setOnClickListener( newOnClickListener(){
@Override
public voidonClick(Viewv){
// TODOAuto-generatedmethodstub
list.clear();
System.out.println("=================1");
getContacts_LastMessage();
System.out.println("=================2");
StringBuildersb= newStringBuilder();
if(list!= null){
System.out.println("=================3");
for( inti=0;i<list.size();i++){
System.out.println("=================4:"+i);
ContactInfotmp= newContactInfo();
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("listisnull");
}
}
});
}

publicStringgetCanonicalAddresses(Stringrecipient_ids){
String[]ids=recipient_ids.split("");
System.out.println("recipient_ids:"+recipient_ids);
StringaddressResult="";
for( inti=0;i<ids.length;i++){
Cursorcur=ReadSmsActivity. this.getContentResolver().query(Uri.parse("content://mms/"),
newString[]{"*fromcanonical_addresseswhere_id="+ids[i].toString()+"--"}, null, null, null);
if(cur.getCount()>0){
while(cur.moveToNext()){
String_id=cur.getString(cur.getColumnIndex("_id"));
Stringaddress=cur.getString(cur.getColumnIndex("address"));
addressResult+="{"+_id+","+address+"}";
}
}
}
returnaddressResult;
}

/**
*从mms数据库中检索threads表
*/
public voidgetContacts_LastMessage()
{
ContentResolvercr=ReadSmsActivity. this.getContentResolver();
Cursorcursor=cr.query(Uri.parse("content://mms/"), newString[]
{"*fromthreads--"}, null, null, null);
while(cursor.moveToNext())
{
intthread_id=cursor.getColumnIndex("_id");
intdate=cursor.getColumnIndex("date");
intmessage_count=cursor.getColumnIndex("message_count");
intsnippet=cursor.getColumnIndex("snippet");
intrecipient=cursor.getColumnIndex("recipient_ids");

// 格式化短信日期显示
SimpleDateFormatsfd= newSimpleDateFormat("MM-ddhh:mm:ss");
Datedate_format= newDate(Long.parseLong(cursor.getString(date)));
Stringtime=sfd.format(date_format);

// 获得短信的各项内容
Stringinfo[]=getPhoneNum(cursor.getString(thread_id));
Stringlast_mms=cursor.getString(snippet);
Stringdate_mms=time;
Stringcount_mms=cursor.getString(message_count);
Stringrecipient_ids=cursor.getString(recipient);

// 判断是否联系人
Stringcontact=getContactNameFromPhoneNum( this.getApplicationContext(),info[0]);

// 获得最后的未读短信与已读短信
Stringfinal_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
*/
publicStringgetContactNameFromPhoneNum(Contextcontext,StringcontactInfo){
LongcurPersonID;
StringcontactNames="";
Uriuri=Uri.parse("content://com.android.contacts/phone_lookup/"+contactInfo);
Cursorcursor=getContentResolver().query(uri, null, null, null, null);
if(cursor.moveToFirst()){
StringcontactName=cursor.getString(cursor.getColumnIndex("display_name"));
curPersonID=cursor.getLong(cursor.getColumnIndex("_id"));
cursor.close();
if(contactNames=="")
contactNames=contactName;
else
contactNames=contactNames+","+contactName;
}
returncontactNames;
}
/**
*添加到列表
*
@param contact
*
@param last_mms
*
@param final_count
*
@param date_mms
*/
public voidgetData(Stringcontact,Stringlast_mms,Stringfinal_count,Stringdate_mms,Stringrecipient_ids){
ContactInfoc= newContactInfo();
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
*/
publicString[]getPhoneNum(Stringthread_id)
{
StringPhoneNum="";
intnoread_mms=0;
String[]info={"",""};
String[]projection= newString[]
{"thread_id","address","person","body","date","type","read"};

Uriuri=Uri.parse("content://sms/");
ContentResolvercr=getContentResolver();

Cursorcursor=cr.query
(
uri,
projection,
"thread_id=?",
newString[]{thread_id},
null
);

while(cursor.moveToNext())
{
intphoneNumber=cursor.getColumnIndex("address");
intisread=cursor.getColumnIndex("read");

if(cursor.getString(isread).equals("0"))
{
noread_mms++;
}

PhoneNum=cursor.getString(phoneNumber);
}
info[0]=PhoneNum;
info[1]=Integer.toString(noread_mms);

returninfo;
}

}

更多相关文章

  1. android通讯录数据库表解析和添加,访问通讯录
  2. android中联系人 以及 ContactsContract类
  3. Android(安卓)-- 系统信息(内存、cpu、sd卡、电量、版本)获取
  4. Android(安卓)调用发送短信的方法
  5. Android小程序实现个人信息管理系统
  6. Android(安卓)Studio gradle配置实践
  7. Android的设备信息
  8. Android初级教程短信防火墙
  9. android 保存 用户名和密码 设置等应用信息优化

随机推荐

  1. Android(安卓)左右布局
  2. ANT编译Android Eclipse工程
  3. android 跑马灯效果及相关
  4. Android CTS 测试总结
  5. Android中构建数据业务应用
  6. Android 源码编译 文件系统制作
  7. Java培训出身,今获阿里Android岗offer,大专
  8. Android Studio 小提示,新建Activity
  9. Android中蓝牙使用步骤小结
  10. ANDROID音频系统散记