Android手机联系人数据库分析 下载:
具体下载目录在 /2013年资料/12月/24日/Android手机联系人数据库分析
运行结果图如下:

上面是每个item对应的布局,右下角被挡住的两个分别为家庭号码,工作号码

哎,不同人信息不一样,长度也不一样啊,看起来不是很美观,
在群组中,因为所有人都在“所有联系人”组中,又在其他组中,故:查询组有多个。
还是先把核心代码贴出来
private void getData(){
HashMap list = new HashMap(100);
/*Cursor c = getContentResolver().query(Contacts.CONTENT_URI, new String[]{Contacts._ID}, null, null, null);
if(c.moveToFirst()){
int id = c.getColumnIndex(Contacts._ID);
}*/
// 姓名和手机号
Cursor c = getContentResolver().query(Phone.CONTENT_URI,
new String[]{Phone.DISPLAY_NAME, Phone.NUMBER, Phone.CONTACT_ID},
Phone.TYPE + "= ",
new String[]{Phone.TYPE_MOBILE+""}, null);
if(c.moveToFirst()){
int id = c.getColumnIndex(Phone.CONTACT_ID);
int name = c.getColumnIndex(Phone.DISPLAY_NAME);
int num = c.getColumnIndex(Phone.NUMBER);
do{
String cid = c.getString(id);
String cname = c.getString(name);
String cnum = c.getString(num);
Item remark = list.get(cid);
if(remark == null){
remark = new Item();
list.put(cid, remark);
}
remark.name = cname;
remark.number = cnum;
Log.i(TAG, "name:" + cname + " num:" + cnum);
}while(c.moveToNext());
}
c.close();
// 邮箱信息
c = getContentResolver().query(Email.CONTENT_URI,
new String[]{Email.DATA, Email.CONTACT_ID},
null, null, Email.CONTACT_ID + " asc");
if(c.moveToFirst()){
int id = c.getColumnIndex(Email.CONTACT_ID);
int em = c.getColumnIndex(Email.DATA);
do{
String cid = c.getString(id);
String email = c.getString(em);
Item remark = list.get(cid);
if(remark == null){
remark = new Item();
list.put(cid, remark);
}
remark.email = email;
Log.i(TAG, "email:" + email);
}while(c.moveToNext());
}
c.close();
Log.i(TAG, "start 工作号码");
// 工作号码
String[] projection = new String[] { Phone.NUMBER, Phone.CONTACT_ID};
c = getContentResolver().query(
Phone.CONTENT_URI, projection,
Phone.TYPE + "= ",
new String[]{Phone.TYPE_WORK + ""},
Phone.CONTACT_ID + " asc");
if(c.moveToFirst()){
int num = c.getColumnIndex(Phone.NUMBER);
int id = c.getColumnIndex(Phone.CONTACT_ID);
do{
String cid = c.getString(id);
String phone = c.getString(num);
Item remark = list.get(cid);
if(remark == null){
remark = new Item();
list.put(cid, remark);
}
remark.workTel = phone;
Log.i(TAG, "workTel:" + phone);
}while(c.moveToNext());
}
c.close();
// 公司名字
c = getContentResolver().query(
Data.CONTENT_URI, new String[]{Data.DATA1, Data.CONTACT_ID},
Data.MIMETYPE + "= ",
new String[]{Organization.CONTENT_ITEM_TYPE},
Data.CONTACT_ID + " asc");
if(c.moveToFirst()){
int data1 = c.getColumnIndex(Data.DATA1);
int id = c.getColumnIndex(Data.CONTACT_ID);
do{
String cid = c.getString(id);
String companyname = c.getString(data1);
Item remark = list.get(cid);
if(remark == null){
remark = new Item();
list.put(cid, remark);