1. 程式人生 > >開啟聯絡人獲取手機號,一個聯絡人對應多個手機號獲取方式

開啟聯絡人獲取手機號,一個聯絡人對應多個手機號獲取方式

最近專案中遇到需要開啟通訊錄獲取聯絡人姓名和手機號功能,但是遇到的問題就是如果在一個聯絡人如果對應多個手機號的時候無法調取系統的選擇手機號的功能,這個太坑了,如果自己寫一個通訊錄的話工作量又非常大.下面我就簡單的提一下相關的程式碼  

/**
 * 開啟通訊錄獲取手機號
 *
 * @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" />