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

转载于:https://www.cnblogs.com/wuyou/p/3426289.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值