<!-- 读取通讯录 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
private List readContacts() {
// 首先,从raw_contacts中读取联系人的id("contact_id")
// 其次,根据contact_id从data表中查询出相应的电话号码和联系人名称
// 然后,根据mimetype来区分哪个是联系人,哪个是电话号码
// Uri rawContactsUri = Uri
// .parse("content://com.android.contacts/raw_contacts");
contacts = new ArrayList<HashMap<String, String>>();
// 从raw_contacts中读取联系人的id("contact_id")
Cursor rawContactsCursor = getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI,
new String[] { "contact_id", "sort_key" }, null, null,
"sort_key"); //按sort_key排序
if (rawContactsCursor != null) {
while (rawContactsCursor.moveToNext()) {
String contactId = rawContactsCursor.getString(0);
// System.out.println(contactId);
if (contactId != null) {
// 曾经有过,已经删除的联系人在raw_contacts表中记录仍在,但contact_id值为null
// 根据contact_id从data表中查询出相应的电话号码和联系人名称
// Uri dataUri = Uri
// .parse("content://com.android.contacts/data");
Cursor dataCursor = getContentResolver().query(
ContactsContract.Data.CONTENT_URI,
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);
}
contacts.add(map);
}
dataCursor.close();
}
}
Gson gson = new Gson();
String json=gson.toJson(contacts);
Log.e("json",json);
rawContactsCursor.close();
}
return contacts;
}