Android开发之获取联系人信息

对于手机来说,联系人分两类:sim卡联系人和手机内置联系人。一般来说,sim卡联系人不带有更多信息(如通讯地址、头像等),但是手机内置联系人可以获取更多信息。这些信息基本上都会绑定手机账户,方便手机用户找回丢失的数据。下面是获取联系人信息的办法:

java文件代码(部分):

/** 获取库Phon表字段 **/

private static final String[] PHONES_PROJECTION = new String[] {

Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID, Phone.CONTACT_ID };


/** 联系人显示名称 **/

private static final int PHONES_DISPLAY_NAME_INDEX = 0;


/** 电话号码 **/

private static final int PHONES_NUMBER_INDEX = 1;


/** 头像ID **/

private static final int PHONES_PHOTO_ID_INDEX = 2;


/** 联系人的ID **/

private static final int PHONES_CONTACT_ID_INDEX = 3;


/** 联系人名称 **/

private ArrayList<String> mContactsName = new ArrayList<String>();


public ArrayList<String> getmContactsName() {

return mContactsName;

}


public void setmContactsName(ArrayList<String> mContactsName) {

this.mContactsName = mContactsName;

}


public ArrayList<String> getmContactsNumber() {

return mContactsNumber;

}


public void setmContactsNumber(ArrayList<String> mContactsNumber) {

this.mContactsNumber = mContactsNumber;

}


/** 联系人头像 **/

private ArrayList<String> mContactsNumber = new ArrayList<String>();


/** 联系人头像 **/

private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();


/** 得到手机通讯录联系人信息 **/

public void getPhoneContacts() {


ContentResolver resolver = context.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(

// m.getResources(), R.drawable.contact_photo);

// }


mContactsName.add(contactName);

mContactsNumber.add(phoneNumber);

}


phoneCursor.close();

}

}


/** 得到手机SIM卡联系人人信息 **/

public void getSIMContacts() {


ContentResolver resolver = context.getContentResolver();

// 获取Sims卡联系人

Uri uri = Uri.parse("content://icc/adn");

Cursor phoneCursor = resolver.query(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);


// Sim卡中没有联系人头像


mContactsName.add(contactName);

mContactsNumber.add(phoneNumber);

}


phoneCursor.close();

}

}

需要在MainFest.xml文件中申请的权限:

<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 读取联系人所需要的权限 -->

大功告成!

个人辛勤劳动成果,如有转载,请注明出处,谢谢!

Android开发之获取联系人信息,布布扣,bubuko.com

Android开发之获取联系人信息

上一篇:Android综合Demo 仿Win8可拖拽界面 自定义控件 自定义spinner,自定义顶栏和副顶栏,内存管理


下一篇:浅谈Android与iOS区别-由图标移动排列想到的