getContentResolver()内容解析者查询联系人、插入联系人
首先,我们需要知道的两个Uri:
1、Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//查到data表中raw_contact_id
2、Uri uri1 = Uri.parse("content://com.android.contacts/data");
想取数据库里面的信息,就必须要知道表的结构我们看一下view_data表:
我们只需要关心下面三列数据:

从表中我们可以看出,Google将联系人信息放在了一列中,也就是data1列,根据raw_contact_id来区分是否为同一个人的信息,根据mimetype区分联系人信息中的name、phone、email,所以首先我们要获得的是raw_contact_id,但是view_data表中的raw_contact_id是重复的。
下面我们再来看一张表raw_contacts:

从这张表中,我们可以获得联系人的raw_contact_id,也就可以获得联系人的个数,然后通过raw_contact_id获取每个联系人。
表的结构了解了,下面我们来看代码:
public void readContacts(){
String name = null;
String phone= null;
String eMail= null;
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri uri1 = Uri.parse("content://com.android.contacts/data");
Cursor cursor = getContentResolver().query(uri,new String[]{"contact_id"},null,null,null);
while (cursor.moveToNext()){
String contacts_id = cursor.getString(0);
//System.out.println("contact_id :"+contacts_id);
if (contacts_id!=null){
/**
* projection 第二个参数,要查询的列,为null则是查询所有的列
* selection 第三个参数,根据什么条件查询
* selectionArgs 第四个参数,根据什么查的参数
*
*/
Cursor cursor1 = getContentResolver().query(uri1,new String[]{"data1","mimetype"},"raw_contact_id=?",new String[]{contacts_id},null);
while (cursor1.moveToNext()){
String data1 = cursor1.getString(0);
String mimetype = cursor1.getString(1);
//System.out.println("data1:"+data1+"--"+"mimetype:"+mimetype);
if (mimetype.equals("vnd.android.cursor.item/name")){
name = data1;
}else if (mimetype.equals("vnd.android.cursor.item/phone_v2")){
phone = data1;
}else if (mimetype.equals("vnd.android.cursor.item/email_v2")){
eMail = data1;
}
}
System.out.println("name:"+name+"- phone:"+phone+" -email:"+eMail);
}
}
}
记得加权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
从代码中,我们可以看的很清楚,先获取raw_contact_id,然后通过他,获取data1和mimetype,然后通过mimetype知道data1中的数据是name、phone或者email。
ps:其实解析data表就是解析view_data
下面是插入联系人:
看代码:
public void insertContacts(){
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri uri1 = Uri.parse("content://com.android.contacts/data");
Cursor cursor = getContentResolver().query(uri,null,null,null,null);
int count = cursor.getCount();
int count_id = count+1;
ContentValues values = new ContentValues();
values.put("contact_id",count_id);
getContentResolver().insert(uri,values);
ContentValues contactValue = new ContentValues();
contactValue.put("data1","张三");
contactValue.put("raw_contact_id",count_id);
contactValue.put("mimetype","vnd.android.cursor.item/name");
getContentResolver().insert(uri1,contactValue);
contactValue.clear();//插完之后记得clear
contactValue.put("data1","133333333");
contactValue.put("raw_contact_id",count_id);
contactValue.put("mimetype","vnd.android.cursor.item/phone_v2");
getContentResolver().insert(uri1,contactValue);
contactValue.clear();
contactValue.put("data1","478569@qq.com");
contactValue.put("raw_contact_id",count_id);
contactValue.put("mimetype","vnd.android.cursor.item/email_v2");
getContentResolver().insert(uri1,contactValue);
contactValue.clear();
}
基本思路,先从raw_contact表中获取当前联系人的个数,然后在加上1之后插入联系人,
getContentResolver()内容解析者查询联系人、插入联系人的更多相关文章
- android102 查询,插入联系人
package com.itheima.getcontacts; import com.itheima.getcontacts.domain.Contact; import android.net.U ...
- Android 之内容提供者 内容解析者 内容观察者
contentProvider:ContentProvider在Android中的作用是对外提供数据,除了可以为所在应用提供数据外,还可以共享数据给其他应用,这是Android中解决应用之间数据共享的 ...
- JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能
主要内容: JDBC连接数据库步骤. 一个简单详细的查询数据的例子. 封装连接数据库,释放数据库连接方法. 实现查询,插入,删除,更新等十一个处理数据库信息的功能.(包括事务处理,批量更新等) 把十 ...
- IdentityServer4源码解析_5_查询用户信息接口
协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息.请求UserInfo接口需要使用通行令牌.响应报文通常是json数据格式,包含了一组claim键 ...
- gradle相关配置内容解析
gradle 项目的构建工具,基于groovy语言.主要用于管理依赖包. as中一般将gradle下载在C:\Documents and Settings<用户名>.gradle\wrap ...
- 使用PDO连接数据库 查询和插入乱码的解决方法
问题:PDO连接数据库后,查询和插入中文到数据库,出现乱码,如图: 解决方法: 法1: try{ $opts_values = array(PDO::MYSQL_ATTR_INIT_COMMAND=& ...
- 把一个select查询结果插入到一个表(可选指定字段和值实例)
把一个select查询结果插入到一个表(可选指定字段和值实例) insert into bak (cc,yf) select cc,9 from ket insert into bak (cc,yf ...
- 写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接内容的本地查询
始出处:http://www.cnblogs.com/Charltsing/p/APIViewer.html QQ:564955427,QQ群:550672198 世面上的API Viewer已经不少 ...
- Oracle Blob查询和插入
注:本文来源于<Oracle Blob查询和插入> 插入 UPDATE cmm05 SET OUTFILE = to_blob('12345690'): 查询: SELECT utl_ra ...
随机推荐
- 关于SUID、SGID、Sticky
SUID属性 passwd命令可以用于更改用户的密码,一般用户可以使用这个命令修改自己的密码.但是保存用户密码的/etc/shadow文件的权限是400,也就是说只有文件的所有者root用户可以写入, ...
- 虚拟机centos6.5 --hadoop2.6集群环境搭建
一.环境说明 虚拟机:virtualBox 系统:centos6.5,64位 集群:3个节点 master 192.168.12.232 slave01 192.168.12.233 slave02 ...
- RedHat 6.2 Linux修改yum源免费使用CentOS源
在没有光盘的情况,需要安装软件包,就要用到共网的yum源来安装了. RedHat linux 默认是安装了yum软件的,但是由于激活认证的原因让redhat无法直接进行yum安装一些软件,如果我们需要 ...
- KVM 介绍(3):I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- #include <NOIP2010 Junior> 三国游戏 ——using namespace wxl;
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...
- 笔记:html 拾遗之一
html 拾遗之一 今天翻了下w3schools.com 把忘掉的语法记一下(仅常用但是不熟的部分) img alt 属性,当图片无法显示时可显示alt属性的文字 br 换行 < html la ...
- 解决Apache/PHP无法启动的问题
最近经常被问到Apache无法启动的情况,所以写一篇文章,总结一下Windows下经常遇到的 Apache/PHP 无法启动的情况的解决方法. Apache/PHP 无法启动分两种情况: 1..Apa ...
- MySQL 基础语句的练习2
CREATE TABLE student ( id INT, NAME ), Chinese FLOAT, English FLOAT, Math FLOAT ); ,,,); ,,,); ,,,); ...
- AppStore 上架注意事项及错误修改
1.上架之前首页要配置好发布证书,配置用于发布的配置文件. 2.必须上传3.5英寸和4英寸图片,这两种图片尺寸不能缺. 3.提交的版本必须是在8.0及以上的版本. 4.必须用发布证书,如果提示UUID ...