Android讀取通訊錄資訊
阿新 • • 發佈:2019-01-31
準備
新增許可權,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; }