/** * 姓名中含有特殊字符的查找不到 * */ public String getContactID(String name) { String id = "0"; Uri uri = ContactsContract.Contacts.CONTENT_URI; String [] projection = new String[]{ContactsContract.Contacts._ID}; String selection = ContactsContract.Contacts.DISPLAY_NAME_ALTERNATIVE + "='" + name + "'"; Cursor cursor = contentResolver.query(uri, projection, selection, null, null); if(cursor.moveToNext()) { id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); } return id; } /** * 查询的数据为原始数据(姓名含有特殊未经处理) * */ public String getContactId(String contactName) { //读取通讯录的全部的联系人 //需要先在raw_contact表中遍历id,并根据id到data表中获取数据 Uri uri = Uri.parse("content://com.android.contacts/contacts"); Cursor cursor = contentResolver.query(uri, new String[]{ContactsContract.Data._ID}, null, null, null); if (cursor == null) { return null; } while(cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//联系人ID //如果要获得data表中某个id对应的数据 uri = Uri.parse("content://com.android.contacts/contacts/"+id+"/data"); Cursor cursor2 = contentResolver.query(uri, new String[]{"data1"}, "data1='" + contactName + "'",null, null); if (cursor2 == null) { return null; } while(cursor2.moveToNext()){ for (int i = 0; i <cursor2.getColumnCount(); i++) { String type = cursor2.getColumnName(i); try { String val = cursor2.getString(i); if (val != null && val instanceof String && val.equals(contactName)) { // Log.d(TAG, "" + type + ": " + val); return id; } } catch (Exception e) { // e.printStackTrace(); } } } } return null; } /** * 通过关键字搜索联系人,关键字不限于姓名、电话号码 * */ public String searchContactByKeyword(String keyword) { String id = null; Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, keyword); // Uri uri2 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, phoneNumber); 根据电话号码查找联系人 String[] projection = new String[]{ContactsContract.Contacts._ID}; Cursor cursor = contentResolver.query(uri, projection, null, null, null); if (cursor == null) { return null; } if (cursor.moveToFirst()) { id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); } return id; }