Android 获取手机联系人信息

        //获取联系人
        Uri rawContacts = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(rawContacts, null, null, null, null);
        while (cursor.moveToNext()) {
            String contactId = cursor.getString(cursor.getColumnIndex("contact_id"));
            Uri dataUri = Uri.parse("content://com.android.contacts/data");
            System.out.println("联系人id = " + contactId);
            Cursor dataCursor = contentResolver.query(dataUri, null, "contact_id=?", new String[]{contactId}, null);
            while (dataCursor.moveToNext()) {
                System.out.println("联系人名称="+dataCursor.getString(dataCursor.getColumnIndex("data1")));
                System.out.println("数据类型="+dataCursor.getString(dataCursor.getColumnIndex("mimetype")));
            }
            dataCursor.close();
            System.out.println("——————————————");
        }
        cursor.close();

通信录的相关数据也保存在数据库文件中,保存的路径为:/data/data/com.android.providers.contacts/databases/contacts2.db。我们在通讯录界面上添加联系人时,内部实际上是通过ContentProvider向数据库中添加记录。通讯录的界面应用与ContentProvider应用是分开的。通讯录界面应用的保存位置为:/data/data/com.android.contacts

 

常用的几张表如下:

raw_contacts:存放联系人的ID

字段display_name:存放姓+名的组合,便于快速得到用户的姓名。注意,当向该表添加联系人时该字段是为null的,只有在向data表中添加姓名时,才会发出update语句来更新该字段。

data:存放联系人的详细信息,如姓名、手机等,主要几个字段的含义如下:

字段data1:存放具体数据

字段data2:对于电话号码,存放类型:家庭电话、手机号等,2代表手机号

            对于邮箱,存放类型

            对于姓名,存放名字部分,data3存放姓氏部分

字段mimetype_id:区分数据的类型,5-电话数据,6-姓名数据,1-email数据,对应表mimetypes中的记录ID

 

这两个表的对应关系是:raw_contacts 1:N data

 

mimetypes:数据的类型,如下图:

 

 

使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作,需要加入读写联系人信息的权限

<uses-permissionandroid:name="android.permission.READ_CONTACTS" />

<uses-permissionandroid:name="android.permission.WRITE_CONTACTS" />

 

文章参考了:http://hi.baidu.com/sonmeika/item/19e46c728f61ab356cc37c46

posted @ 2013-11-16 00:27  无忧之路  阅读(1799)  评论(0编辑  收藏  举报
无忧之路