有时候项目中需要用到获得手机联系人,方法有很多,这中方法实现的是跳转到手机联系人完整页面(有手机自带的字母筛选功能),选择联系人后返回从而得到联系人的电话,姓名,头像等数据;
首先需要跳转到联系人的intent
Intent i = new Intent();
i.setAction(Intent.ACTION_PICK);
i.setData(ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(i, 0);
之后便是在activity里实现onActivityResult方法:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 0:
if (data == null) {
return;
}
String phoneNumber = null;
Uri contactData = data.getData();
if (contactData == null) {
return ;
}
Cursor cursor = managedQuery(contactData, null, null, null, null);
if (cursor.moveToFirst()) {
String name = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhone = cursor
.getString(cursor
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
String id = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID));
if (hasPhone.equalsIgnoreCase("1")) {
hasPhone = "true";
} else {
hasPhone = "false";
}
if (Boolean.parseBoolean(hasPhone)) {
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + id, null, null);
while (phones.moveToNext()) {
phoneNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
setTitle(phoneNumber);
}
phones.close();
Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,Long.parseLong(id));
System.out.println("uri=="+uri);
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(this.getContentResolver(), uri);
BitmapFactory.Options opts = new BitmapFactory.Options();//获取缩略图显示到屏幕上
opts.inSampleSize=2;//考虑到bitmap内存暂用大的问题,把图片缩小四分之一
Bitmap contactPhoto = BitmapFactory.decodeStream(input, null, opts);
cameraIv.setImageBitmap(contactPhoto);
}
Log.d("marrs", "phoneNumber" + phoneNumber+"\n"+"name"+name);
}
break;
default:
break;
}
}