1. 程式人生 > >Android讀取通訊錄資訊

Android讀取通訊錄資訊

準備

新增許可權,6.0以下在清單檔案新增以下許可權

<-- 讀取聯絡人許可權 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />

6.0以上動態申請許可權,自己百度哈

使用

List<HashMap<String, String>> s = readContact();
//列印log觀察 Log.d("TAG", "----讀取到的聯絡人----" + s);

//獲取聯絡人姓名
s.get(i).get("name")
//獲取聯絡人號碼
//此處劃重點,有些手機讀取出來的號碼是有空格的,例如:158 251 17723,
s.get(i).get("phone")
//如果你需要獲取的格式為:15825117723,則應該寫成
s.get(i).get("phone").replace(" ", "")

/**
 * 獲取通訊錄聯絡人
 **/
private ArrayList<HashMap<String, String>> readContact() {
    // 首先,從raw_contacts中讀取聯絡人的id("contact_id")
    // 其次, 根據contact_id從data表中查詢出相應的電話號碼和聯絡人名稱
    // 然後,根據mimetype來區分哪個是聯絡人,哪個是電話號碼

    Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");
    Uri dataUri = Uri.parse("content://com.android.contacts/data");

    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

    // 從raw_contacts中讀取所有聯絡人的id("contact_id")
    Cursor rawContactsCursor = getContentResolver().query(rawContactsUri,
            new String[]{"contact_id"}, null, null, null);
    if (rawContactsCursor != null) {
        while (rawContactsCursor.moveToNext()) {
            String contactId = rawContactsCursor.getString(0);
            // System.out.println("得到的contact_id="+contactId);

            // 根據contact_id從data表中查詢出相應的電話號碼和聯絡人名稱, 實際上查詢的是檢視view_data
            Cursor dataCursor = getContentResolver().query(dataUri,
                    new String[]{"data1", "mimetype"}, "contact_id=?",
                    new String[]{contactId}, null);

            if (dataCursor != null) {
                HashMap<String, String> map = new HashMap<String, String>();
                while (dataCursor.moveToNext()) {
                    String data1 = dataCursor.getString(0);
                    String mimetype = dataCursor.getString(1);

                    if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {//手機號碼
                        map.put("phone", data1);
                    } else if ("vnd.android.cursor.item/name".equals(mimetype)) {//聯絡人名字
                        map.put("name", data1);
                    }
                }
                list.add(map);
                dataCursor.close();
            }
        }
        rawContactsCursor.close();
    }
    return list;
}