1.数据源
联系人信息是 在 /data/data/com.android.prodivers.contacts 中的数据库 contacts2.db
表: row_contacts 记录联系人的id
视图: view_data 字段:data1记录了电话号码或联系人姓名 mimetype记录类型是号码或姓名(具体看字段值)
2.获取方式和code
(1)内容提供者URI :
content://com.android.contacts/raw_contacts -> 获取 表 row_contacts中的信息
content://com.android.contacts/data -> 获取 视图 view_data中的信息
(2)code:
private List<Map<String, String>> GetContacts() {
List<Map<String, String>> listResu = new ArrayList<Map<String, String>>();
// 拿到内容解析者
ContentResolver resolver = getContentResolver();
// 获取 row_contacts中的id (联系人的id)
Cursor cursor = resolver.query(
Uri.parse("content://com.android.contacts/raw_contacts"),
new String[] { "_id" }, null, null, null);
while (cursor.moveToNext()) {
Map<String, String> hashContacts = new HashMap<String, String>();
String contectId = cursor.getString(0); // 拿到联系人id
// 获取 view_data中的姓名和号码
Cursor cursorData = resolver.query(
Uri.parse("content://com.android.contacts/data"),
new String[] { "mimetype", "data1" }, "contact_id="
+ contectId, null, null);
while (cursorData.moveToNext()) {
// 判断mimetype类型 如果是电话号码
if (cursorData.getString(0).equals(
"vnd.android.cursor.item/phone_v2")) {
hashContacts.put("phone", cursorData.getString(1));
// 如果是姓名
} else if (cursorData.getString(0).equals(
"vnd.android.cursor.item/name")) {
hashContacts.put("name", cursorData.getString(1));
}
}
listResu.add(hashContacts);
cursorData.close();
}
cursor.close();
return listResu;
}