Android获取手机通讯录信息
使用场景以及方向
- 可运用于所有的需要获取手机通讯录的app,例如消费金融的风控系统一般就需要获取手机通讯录
核心代码
-
android6.0以及以上的系统需要动态获取手机通讯录的权限
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { //申请权限 第二个参数是一个 数组 说明可以同时申请多个权限 ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_CONTACTS}, 1); } else {//已授权 startAddressActivity(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == 1) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { //权限申请成功 startAddressActivity(); } else { Toast.makeText(this,"获取联系人的权限申请失败",Toast.LENGTH_LONG).show(); } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
AddressActivity包含了关于手机通讯录的展示页面,搜索等功能
-
Address类封装了通讯录数据的获取等信息
/** * 得到手机通讯录联系人信息 **/ public static List<AddressBean> getPhoneContacts() { List<AddressBean> address=new ArrayList<>(); ContentResolver resolver = ExApplication.mContext.getContentResolver(); // 获取手机联系人 Cursor phoneCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,PHONES_PROJECTION,null,null,null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { AddressBean bean=new AddressBean(); //得到手机号码 String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX).replace(" ",""); phoneNumber=phoneNumber.replace("+86",""); bean.setPhoneNumber(phoneNumber); //当手机号码为空的或者为空字段 跳过当前循环 if (TextUtils.isEmpty(phoneNumber)) continue; //得到联系人名称 String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX); bean.setContactName(contactName); bean.setName(contactName); //得到联系人ID Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX); bean.setContactid(contactid+""); //得到联系人头像ID Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX); bean.setPhotoid(photoid+""); //得到联系人头像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(ExApplication.mContext.getResources(), R.mipmap.jc_common_blankuser); } bean.setContactPhoto(contactPhoto); if (bean.getPhoneNumber().trim().length()==11&&"1".equals(bean.getPhoneNumber().trim().substring(0,1))){ address.add(bean); } } phoneCursor.close(); } return address; }
-
AddressBean,数据模型model
public class AddressBean extends GroupMemberBean implements Serializable { private String phoneNumber;//得到手机号码 private String contactName;//得到联系人名称 private String contactid; //得到联系人ID private String photoid; ////得到联系人头像ID private Bitmap contactPhoto;//得到联系人头像Bitamp private String sortLetters; }