Android 开发工具类 37_ ContactInfoProvider
Android 手机中的联系人信息保存在 data\data\com.android.providers.contacts\databases\contacts2.db 中。主要有
raw_contacts 表:用来存放联系人的 id;
data 表:用来存放联系人的具体数据;
mimetypes 表:保存数据类型。
public class ContactInfoProvider {
private Context context;
public ContactInfoProvider(Context context) {
this.context = context;
}
/**
* 返回所有的联系人的信息
*
* @return
*/
public List<ContactInfo> getContactInfos() {
// 将所有联系人存入该集合
List<ContactInfo> infos = new ArrayList<ContactInfo>();
// 获取 raw_contacts 表所对应的 Uri
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
// 获取 data 表所对应的 Uri
Uri datauri = Uri.parse("content://com.android.contacts/data");
// 参数二:所要查询的列,即联系人的id。获取一个查询数据库所返回的结果集
Cursor cursor = context.getContentResolver().query(uri, new String[] { "contact_id" }, null, null, null);
// 移动游标
while (cursor.moveToNext()) {
// 因为我们只需要查询一列数据-联系人的id,所以我们传入0
String id = cursor.getString(0);
// 用于封装每个联系人的具体信息
ContactInfo info = new ContactInfo();
// 得到 id 后,我们通过该 id 来查询 data 表中的联系人的具体数据(data表中的data1中的数据)。
// 参数二:null,会将所有的列返回回来
// 参数三:选择条件 返回一个在data表中查询后的结果集
Cursor dataCursor = context.getContentResolver().query(datauri, null, "raw_contact_id=?", new String[] { id }, null);
while (dataCursor.moveToNext()) {
//dataCursor.getString(dataCursor.getColumnIndex("mimetype"))获取data1列中具体数据的数据类型,这里判断的是联系人的姓名
if ("vnd.android.cursor.item/name".equals(dataCursor.getString(dataCursor.getColumnIndex("mimetype")))) {
//dataCursor.getString(dataCursor.getColumnIndex("data1"))获取data1列中的联系人的具体数据
info.setName(dataCursor.getString(dataCursor.getColumnIndex("data1")));
} else if ("vnd.android.cursor.item/phone_v2".equals(dataCursor.getString(dataCursor.getColumnIndex("mimetype")))) {//数据类型是否是手机号码
info.setPhone(dataCursor.getString(dataCursor.getColumnIndex("data1")));
}
}
// 每查询一个联系人后就将其添加到集合中
infos.add(info);
info = null;
// 关闭结果集
dataCursor.close();
}
cursor.close();
return infos;
}
}
Android 开发工具类 37_ ContactInfoProvider的更多相关文章
- Android开发工具类
7种无须编程的DIY开发工具 你知道几个? 现如今,各种DIY开发工具不断的出现,使得企业和个人在短短几分钟内就能完成应用的创建和发布,大大节省了在时间和资金上的投入.此外,DIY工 具的出现,也帮助 ...
- android开发工具类之获得WIFI IP地址或者手机网络IP
有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...
- android开发工具类总结(一)
一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...
- Android 开发工具类 35_PatchUtils
增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...
- Android 开发工具类 13_ SaxService
网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ...
- Android 开发工具类 06_NetUtils
跟网络相关的工具类: 1.判断网络是否连接: 2.判断是否是 wifi 连接: 3.打开网络设置界面: import android.app.Activity; import android.cont ...
- Android 开发工具类 03_HttpUtils
Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. import java.io.Bu ...
- Android 开发工具类 19_NetworkStateReceiver
检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观 ...
- Android 开发工具类 27_多线程下载大文件
多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ...
随机推荐
- 5.Vue临时上传文件夹
1.在项目目录中,通过npm install multiparty进行安装必要组件npm install multiparty --save-dev 2.app.js中添加app.use(bodyPa ...
- Docker Compose部署 nginx代理Tomcat集群
一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...
- 用Dagger2在Android中实现依赖注入
依赖注入这个模式(模式已经用烂了,这里再烂一次)是用来给应用的各部分解耦的.使应用开发更加可扩展,更容易维护.通过本文你会学到如何使用Dagger2来处理依赖. 简介 如果以对象需要另外的一个对象才能 ...
- std::set 中内部元素有序条件删除的理解
std::set 中内部元素有序条件删除的理解 1. std::set中的元素是有序排列的 注意:Set集合中的元素通过iterator的引用,但是不能修改. 元素排序: (1)元素中实现比较oper ...
- hihocoder 二分·二分答案【二分搜索,最大化最小值】 (bfs)
题目 这道题做了几个小时了都没有做出来,首先是题意搞了半天都没有弄懂,难道真的是因为我不打游戏所以连题都读不懂了? 反正今天是弄不懂了,过几天再来看看... 题意:一个人从1点出发到T点去打boss, ...
- 万能头文件#include <bits/stdc++.h>
最近在做题的时候看到别人的题解发现别人都用这个 突然之间打开新世界的大门 去百度之后才知道#include <bits/stdc++.h>包含了目前所有的c++头文件 也就是说只要用#in ...
- jdbc的配置(更新中)
MySQL的 JDBC URL 格式 for Connector/J 如下例: 格式如下: jdbc:mysql://[host][,failoverhost...][:port]/[databas ...
- AngularJS 承诺 Promise
一.概念解释 全称是未来与承诺,Futures and promises,是一种编程模式,不是AngularJS首创.javascript里有个流行库Q,而AngularJS是$q,其就是从Q引入的: ...
- hdu 1.3.3 今年暑假不AC
//简单.... 1 #include<iostream> #include<cstdio> #include<cstdlib> using namespace s ...
- Mirror--不同SQL Server版本使用的默认镜像端点加密算法不同
在搭建镜像时遇到一个小问题,搭建镜像时报错,排查好半天,对证书/用户/登陆/连接授权等方面都做了逐一排查,未发现异常,最后生成镜像端点创建脚本时,才发现问题原因: 镜像主节点(10.50.4276)的 ...