最近项目中遇到需要打开通讯录获取联系人姓名和手机号功能,但是遇到的问题就是如果在一个联系人如果对应多个手机号的时候无法调取系统的选择手机号的功能,这个太坑了,如果自己写一个通讯录的话工作量又非常大.下面我就简单的提一下相关的代码
/** * 打开通讯录获取手机号 * * @param context */ public static void getTelPhoneNum(Activity context) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); context.startActivityForResult(intent, 1); }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null) { String[] contants = getPhoneContacts( this,data.getData()); Log.i("info","contants:"+contants[1]); } }
/** * 通过uri获取联系人手机号和姓名 * @param context * @param uri * @return */ public static String[] getPhoneContacts(Context context,Uri uri) { if(uri==null) return null; String[] contact = new String[2]; Cursor cursor=null; try{ ContentResolver cr = context.getContentResolver(); //先定义出来,一会拼地址用 cursor = cr.query(uri, null, null, null, null); if (cursor.moveToFirst()) { int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); contact[0] = cursor.getString(nameFieldColumnIndex);///姓名 String[] strs = cursor.getColumnNames(); for (int i = 0; i < strs.length; i++) { if (strs[i].equals("data1")) { ///手机号 contact[1] = cursor.getString(cursor.getColumnIndex(strs[i])).replace("+86","").replaceAll(" ","").trim(); } } } return contact; }catch(Exception e){ return null; }finally { if (cursor != null) cursor.close(); } }
添加权限
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />