前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[android] 获取系统的联系人信息

[android] 获取系统的联系人信息

作者头像
唯一Chat
发布2019-09-10 11:12:19
8110
发布2019-09-10 11:12:19
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

内容提供是实质上是个接口,后门,他给别人提供数据,系统联系人是个比较复杂的内容通过者。

找到/data/data/com.android.providers.contacts/contacts2.db

这个目录下还有个文件contacts2.db.-journal,这个文件和数据库的事务相关

联系人应用数据库的主要结构

raw_contacts 联系人表 contact_id 联系人id

data数据表 raw_contact_id联系人id,mimetype_id数据类id,data1数据

mimetypes类型表 1 email,5 phone,7 name

查询所有的联系人信息:

  1. 查询raw_contacts表把联系人id取出来
  2. 根据id查询data表,把所有的数据取出来
  3. 根据数据的mimetype_id查询mimetypes表获取数据的业务类型

查询系统源代码,找到providers/Contacts相关的,先找清单文件,看到<Provider>节点,name属性和authories属性,主机名部分是分号隔开的contacts;com.android.contacts 低版本是前一个,高版本是后一个。

找到源码定义规则的地方UriMatcher对象的地方,看实际规则,一般是表名,因此实际Uri路径是 content://com.android.contacts/表名

获取ContentResolver对象,调用对象的query(uri)方法,参数:Uri就是路径

得到Cursor对象,循环Cursor对象

读取content://com.android.contacts/raw_contacts没问题

读取content://com.android.contacts/data 时出现错误,mimetype_id字段不存在,实际走的视图表,当你不确定字段的时候,调用Cursor对象的getColumnNames()方法,返回字段数组,打印一下

这里字段应该是data1和mimetype

调用Cursor对象的query()方法,注意写上条件,”raw_contact_id=?” 和值new String[]{id}

世面上的很多应用都是取出了联系人的信息,社交应用一般都有发送信息给对方,读取系统联系人

需要定义权限:<uses-permission android:name="android.permission.READ_CONTACTS"/>

注意:如果一个账号被删除了,他不是真正的删除而是把raw_contacts表里面的contact_id写为null了,查询的时候应该加个判断是否为空!=null

activity:

代码语言:javascript
复制
        ContentResolver resolver=getContentResolver();
        Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri=Uri.parse("content://com.android.contacts/data");
        //循环联系人表
        Cursor cursor=resolver.query(uri, null, null, null, null);
        while(cursor.moveToNext()){
            String id=cursor.getString(cursor.getColumnIndex("contact_id"));
            //查找数据表
            Cursor dataCursor=resolver.query(dataUri, null,"raw_contact_id=?", new String[]{id}, null);
            while(dataCursor.moveToNext()){
                String data1=dataCursor.getString(dataCursor.getColumnIndex("data1"));
                String mimetype=dataCursor.getString(dataCursor.getColumnIndex("mimetype")); 
                System.out.println("data1:"+data1+",mimetype:"+mimetype);
            }
            System.out.println("==========");
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档