//获取联系人        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_contacts1:Ndata

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

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

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

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

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

更多相关文章

  1. android 数据库操作
  2. Android与(Servlet)服务器交互
  3. Android(安卓)ProtoBuf
  4. Android(安卓)Network数据存储
  5. Android(安卓)将asserts文件夹内文件写入SD卡中
  6. Android腾讯微薄客户端开发十三:提及篇(与我有关的微博)
  7. Android(安卓)SQLiteDatabase 的使用
  8. Android(安卓)ExpandableListActivity 学习笔记
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android入门之在子线程中更新UI
  2. Android(安卓)Studio配置环境不成功(SDK相
  3. android国际化(多语言,图片)
  4. Android(安卓)NDK开发之旅32--云服务器Ub
  5. Android定制:修改开机启动画面
  6. 个人解读Activity之四-Part1
  7. 数据库小白:GROUP BY和ORDER BY不能一起用
  8. 试读《Android软件安全与逆向分析》
  9. [转]修改Android的自带程序“屏幕锁”
  10. 09-Garbage Collection in Android