android 群发会话中获取联系人列表
16lz
2021-01-25
主要步骤:
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;
}
}
更多相关文章
- android通讯录数据库表解析和添加,访问通讯录
- android中联系人 以及 ContactsContract类
- Android(安卓)-- 系统信息(内存、cpu、sd卡、电量、版本)获取
- Android(安卓)调用发送短信的方法
- Android小程序实现个人信息管理系统
- Android(安卓)Studio gradle配置实践
- Android的设备信息
- Android初级教程短信防火墙
- android 保存 用户名和密码 设置等应用信息优化