天天看點

Android開發之擷取聯系人資訊

對于手機來說,聯系人分兩類:sim卡聯系人和手機内置聯系人。一般來說,sim卡聯系人不帶有更多資訊(如通訊位址、頭像等),但是手機内置聯系人可以擷取更多資訊。這些資訊基本上都會綁定手機賬戶,友善手機使用者找回丢失的資料。下面是擷取聯系人資訊的辦法:

java檔案代碼(部分):

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;

private static final int PHONES_PHOTO_ID_INDEX = 2;

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();

}

}

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" /> <!-- 讀取聯系人所需要的權限 -->

大功告成!

個人辛勤勞動成果,如有轉載,請注明出處,謝謝!

繼續閱讀