用ContentProvider获取通讯录联系人
手机中的联系人数据实际是保存在数据库中的,但Android并没有让我们通过操作数据库去读取数据,而是通过一个ContractProvider这个应用提供了一个ContentProvider访问接口。
获取email的方法与获取电话号码相同。
具体实现过程如下:
添加应用权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
实际获取号码的代码如下:
private void getContacts() {
// 得到ContentResolver对象
ContentResolver cr = this.getContentResolver();
// 取得电话本中开始一项的光标,主要就是查询"contacts"表
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext())
{
StringBuilder sbLog = new StringBuilder();
// 取得联系人名字 (显示出来的名字),实际内容在 ContactsContract.Contacts中
int nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
String name = cursor.getString(nameIndex);
sbLog.append("name=" + name + ";");
// 取得联系人ID
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 根据联系人ID查询对应的电话号码
Cursor phoneNumbers = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null);
// 取得电话号码(可能存在多个号码)
while (phoneNumbers.moveToNext())
{
String strPhoneNumber = phoneNumbers.getString(phoneNumbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
sbLog.append("Phone=" + strPhoneNumber + ";");
}
phoneNumbers.close();
// 根据联系人ID查询对应的email
Cursor emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = "
+ contactId, null, null);
// 取得email(可能存在多个email)
while (emails.moveToNext())
{
String strEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
sbLog.append("Email=" + strEmail + ";");
}
emails.close();
Log.v(TAG, sbLog.toString());
}
cursor.close();
}
用ContentProvider获取通讯录联系人的更多相关文章
- Android软件开发之获取通讯录联系人信息
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来. 这一篇文章我主要带领同学们熟悉Android的通讯录机制. 图中选中 ...
- ContentProvider往通讯录添加联系人和获取联系人
public class MainActivity extends Activity { private People people; private List<People> pList ...
- iOS中获取本地通讯录联系人以及汉字首字母排序
iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBo ...
- iOS获取通讯录所有联系人信息
以下是2种方式: 第一种方法: GetAddressBook.h #import <Foundation/Foundation.h> @interface GetAddressBook : ...
- Android-AsyncTask异步任务(获取手机联系人)
本篇随笔将讲解一下Android的多线程的知识,以及如何通过AsyncTask机制来实现线程之间的通信. 一.Android当中的多线程 在Android当中,当一个应用程序的组件启动的时候,并且没有 ...
- 获取手机联系人项目 PPGetAddressBook
PPGetAddressBook PPGetAddressBook对AddressBook框架(iOS9之前)和Contacts框架(iOS9之后)做了对应的封装处理; 支持获取按联系人姓名首字拼音A ...
- IOS 获取通讯录中信息
获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...
- Swift - 访问通讯录联系人(使用纯代码实现)
1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...
- Swift - 添加、修改、删除通讯录联系人
使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...
随机推荐
- To B运营和To C运营到底有什么区别?
无论To B还是To C运营其本质都是从目标用户转化为付费用户实现产品的变现,但是两者之间仍然存在一定的区别. 单纯从概念上来说,To B和To C的区别主要是从电商兴起的,并随着互联网的快速发展,T ...
- windows系统numpy的下载与安装教程
numpy是一款基于python的功能强大的科学计算包.要安装numpy首先你得先安装python.python的安装非常简单,本人安装的是python3.4. 工具/原料 安装好的python程序 ...
- opencv2函数学习之flip:实现图像翻转
在opencv2中,flip函数用来进行图片的翻转,包括水平翻转,垂直翻转,以及水平垂直翻转. void flip(const Mat& src, Mat& dst, int flip ...
- ubuntu安装ruby的几种方法总结
1.apt-get安装 可以使用apt-cache查询功能,找到对应的可用的ruby版本. $ sudo apt-cache search ruby #这个结果很长,我只截取最后与ruby有关的部分 ...
- php插入数据含有特殊符号的处理方法
我们在向mysql写入数据时,比如: mysql_query(”update table set `title`=’kuhanzhu’s blog’”); http://www.cnblogs.com ...
- Mac终端配置,DIY你的Terminal (iTerm 2 + Oh My Zsh)
使用mac osx一年以来,自带的Terminal终端一直都是白底黑字,食之无味,越来越缺乏新鲜感,怎么也得想个法子来刺激下眼球. 不然花那么多大洋买你回来是要哪般,难道真是为来学习工作??? 怎么可 ...
- Centos7下安装redis实战(单机版以及集群)
一.背景 因项目需要,要引入redis做缓存,就在centos7下亲自安装了一遍redis,刚好趁着这个机会就来把redis的概念以及单机版和集群版redis安装步骤记录下来,在此和大家一起分享. 二 ...
- Vue笔记:封装 axios 为插件使用
前言 自从Vue2.0推荐大家使用 axios 开始,axios 被越来越多的人所了解.使用axios发起一个请求对大家来说是比较简单的事情,但是axios没有进行封装复用,项目越来越大,引起的代码冗 ...
- mysql关于timestamp字段相关内容
发现5.6和5.7版本的创建表不一致,从5.6导出数据表创建sql文件,然后导入到5.7表会报错,timestamp不能为空 查看的sql_mode mysql5.0以上支持的三种模式 1. ANSI ...
- sshd服务防止暴力破解
sshd防止暴力破解几种方式: 1.密码足够复杂 2.修改默认端口号 3.不适用root用户名登录. #是否可以禁止root身份登录?不行,因为有些程序需要使用root什么登录,另外判断一个用户是不是 ...