android中获取联系人相关信息

本文介绍了一种从Android设备的手机内存及SIM卡中读取联系人的方法,包括姓名、电话号码及联系人头像等信息。文章通过具体代码展示了如何使用ContentResolver和Cursor进行查询,并针对不同情况进行处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己看...........


public static final int PHONES_DISPLAY_NAME_INDEX = 0;
public static final int PHONES_NUMBER_INDEX = 1;
public static final int PHONES_PHOTO_ID_INDEX = 2;
public static final int PHONES_CONTACT_ID_INDEX = 3;

public static final String[] PHONES_PROJECTION = new String[]
{
Phone.DISPLAY_NAME,
Phone.NUMBER,
Photo.PHOTO_ID,
Phone.CONTACT_ID
};
public static ArrayList<MyContacts> mycontacts=null;
//获取手机中的联系人信息
private void getPhoneContacts(Context mContext) {

if(mycontacts==null){
mycontacts= new ArrayList<MyContacts>();
}
ContentResolver resolver = mContext.getContentResolver();

// 获取手机联系人
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);

if (phoneCursor != null) {

while (phoneCursor.moveToNext()) {
//得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
//当手机号码为空的或者为空字段跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;

//得到联系人名称
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);

//得到联系人ID
Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);

//得到联系人头像ID
Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);

//得到联系人头像Bitamp
Bitmap contactPhoto = null;

//photoid 大于0 表示联系人有头像如果没有给此人设置头像则给他一个默认的
if(photoid > 0 ) {
Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);
contactPhoto = BitmapFactory.decodeStream(input);
}else {
contactPhoto = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.contact);
}

MyContacts myContact=new MyContacts(contactName, phoneNumber, contactPhoto);

mycontacts.add(myContact);
}
phoneCursor.close();
}


}
/* 获得手机sim卡联系人信息
sim卡和手机本人 获取的方式类似 只是url有点不一样 ,须要注意的一点是 sim卡 是没有联系人头像的。 */
private void getSIMContacts(Context mContext) {
if(mycontacts==null){
mycontacts= new ArrayList<MyContacts>();
}
ContentResolver resolver = mContext.getContentResolver();
// 获取Sims卡联系人
Uri uri = Uri.parse("content://icc/adn");
Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null,
null);
Bitmap contactPhoto = null;
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {


// 得到手机号码
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
// 当手机号码为空的或者为空字段 跳过当前循环
if (TextUtils.isEmpty(phoneNumber))
continue;
// 得到联系人名称
String contactName = phoneCursor
.getString(PHONES_DISPLAY_NAME_INDEX);

//Sim卡中没有联系人头像 加載默認圖片
contactPhoto = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.contact);
MyContacts myContact=new MyContacts(contactName, phoneNumber, contactPhoto);
mycontacts.add(myContact);
}
phoneCursor.close();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值