【contacts】Phonebook电话本
http://developer.android.com/intl/zh-CN/reference/packages.html
访问电话本权限
Android的应用程序AndroidManifest.xml中加入:<uses-permission android:name="android.permission.READ_CONTACTS"/> 权限
联系人存放的数据库
Android中的联系人都保存在一个SQLite数据库中,它的路径为:/data/data/com.android.providers.contacts/databases/contacts2.db
contacts2.db的简单介绍可访问:http://hi.baidu.com/_sherry_liu/item/50431e38bef2c24e033edc9b
在联系人数据库中,保存的都是一些小的数据表,即与把所有数据保存成一个表不同,它会对联系人的资料模块化,然后分成多个表保存。
表与表之间使用id相关联起来,这样做的目的是尽量减小数据表的规模,提高数据检索的速度,因为我们检索的时候不是每次都需要读取所有的联系人资料的,这样可以更灵活的选择我们所关心的内容,提高检索速度, 虽然分开的保存数据,可以提高检索的速度,但是也给我们带来了一些不便,就是需要把这些分开的表再重新联合起来,组成我们所需要的完整的数据。
好在这些,android已经替我们准备好了,它在数据库里面建了一些视图。并且,android也提供了很多接口,通过ContentResolver().query方法,传入不同的URI即可访问相应的数据集。
在联系人数据库里面联系人和电话号码是分别存在两个表里面的,因为存在一个联系人拥有几个号码的情况,所以android为联系人和手机号码分别单独创建了相应的视图。
联系人信息的视图里面只保存与联系人相关的资料,例如姓名,是否有手机号码等。 而手机号码资料则是每一个电话号码为一条记录,如果有一个联系人有3个号码,则里面会出现3个该联系人的记录,号码分别为他的三个号码。
如果是需要读取联系人信息,传入的URI为:ContactsContract.Contacts.CONTENT_URI
如果是需要读取手机号码信息传入的URI为:ContactsContract.CommonDataKinds.Phone.CONTENT_URI
电话本访问应用到的类
Cursor类:
android.database.Cursor:
http://developer.android.com/intl/zh-CN/reference/android/database/Cursor.html
关于Cursor的重要方法:
- close() 关闭游标,释放资源
- copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) 在缓冲区中检索请求的列的文本,将其存储
- getColumnCount() 返回所有列的总数
- getColumnIndex(String columnName) 返回指定列的名称,如果不存在返回-1
- getColumnIndexOrThrow(String columnName) 从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
- getColumnName(int columnIndex) 从给定的索引返回列名
- getColumnNames() 返回一个字符串数组的列名
- getCount() 返回Cursor 中的行数
- moveToFirst() 移动光标到第一行
- moveToLast() 移动光标到最后一行
- moveToNext() 移动光标到下一行
- moveToPosition(int position) 移动光标到一个绝对的位置
- moveToPrevious() 移动光标到上一行
Contacts类:
android.provider.ContactsContract.Contacts:
http://developer.android.com/intl/zh-CN/reference/android/provider/ContactsContract.Contacts.html
关联存储联系人的数据表,每个记录集代表一个联系人。Contacts类定义的常量,包含了联系人表的所有列。
ContentResolver类:
android.content.ContentResolver:
http://developer.android.com/intl/zh-CN/reference/android/content/ContentResolver.html
说明:当外部应用需要数据进行添加、删除、修改和查询操作时,需要使用ContentResolver 类来完成。
关于Cursor的重要方法:
- public Uri insert(Uri uri, ContentValues values) 该方法用于添加数据。
- public int delete(Uri uri, String selection, String[] selectionArgs) 该方法用于删除数据。
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 该方法用于更新数据。
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 该方法用于获取数据。
projection:是需要读取的字段
selection:是数据检索的条件
selectionArgs:是数据检索条件的参数
sortOrder:是排序的字段
Phone类:
android.provider.ContactsContract.CommonDataKinds.Phone:
http://developer.android.com/intl/zh-CN/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
关联电话号码数据表, 定义了查询电话号码的Url
代码逻辑
- 首先,通过Activity的getContentResolver()得到ContentResolver的实例,检索联系人数据表。
通过url指明检索的数据表,其他参数指明检索的条件等Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder)
检索条件是很重要的,我们只想取得联系人的相关信息该怎么指明检索条件呢?
//指明联系人姓名不能为空,并且有电话号码的联系人 String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + Contacts.DISPLAY_NAME + " != '' ))";
其他参数,如返回字段,结果的排序等,根据实际情况传入自己的设定。
- 其次,通过游标遍历cursor数组,取得每个联系人的id等
cursor.moveToFirst();
while (!cursor.isAfterLast()) {... } - 再次,用取得的联系人id为条件,检索该联系人的所有电话号码,再进行遍历取得每一个电话号码。
//根据每个联系人的Id,取得该联系人的所有电话号码 Cursor phoneCursor = activity.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, selPhoneCols,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null,null);
- 最后,关闭游标数组,释放资源。
【contacts】Phonebook电话本相关推荐
- Android中读取电话本Contacts联系人的所有电话号信息
1.首先,要知道android 的contacts里的电话信息有多类:moblie,家庭,工作,传真等.如图: 2.android的Contacts是通过ContentProvider来提供的,其实a ...
- 如何从电话本添加联系人
How to add contacts from phonebook 如何从电话本添加联系人 Note:API is deprecated in S60 3.2 so while using this ...
- python程序实例电话本-利用Python电话本小程序!这波操作你给几分?
原标题:利用Python电话本小程序!这波操作你给几分? 最近比较忙,只能抽空的写写文章,其实我也是一个上班族,python完全是个人想学然后希望以后对工作有所帮助,2019年了,祝大家新年快乐. 2 ...
- C#中教你一步步实现一个电话本窗体程序
场景 使用C#窗体程序实现一个电话本应用程序. 实现 新建窗体程序,PhoneBook 然后打开工具箱,拖拽一个ListView到窗体中 拖拽完成后点击右上角三角符号,编辑选项--编辑列. 点击添加, ...
- MTK优美代码赏析6:电话本里的快速排序和插入排序算法
MTK优美代码赏析6:电话本里的快速排序和插入排序算法 记得读书的时候学数据结构和一些程序基础的课程,学了很多的排序算法,当时感觉蛮有趣,也很简单,当大学的教育是以理论为主的,哪些教授们又没给咱举个实 ...
- android通过ContentProvider 取得电话本的数据
2019独角兽企业重金招聘Python工程师标准>>> 先通过getContentResolver 方法来取得一个ContentResolver 对象,然后通过 其query 方法查 ...
- ios自制电话本-swift
我了个去啊,写了一遍博文,上传后,不见了,不见了,不见了...这次就随便写写了,看代码去吧... 1.获取权限,网上也很多,直接copy就行了: func initContact(){//定义一个错误 ...
- python检索用人名查电话_利用Python电话本小程序!这波操作你给几分?
原标题:利用Python电话本小程序!这波操作你给几分? 最近比较忙,只能抽空的写写文章,其实我也是一个上班族,python完全是个人想学然后希望以后对工作有所帮助,2019年了,祝大家新年快乐. 2 ...
- 基于java的电话本管理系统
本程序本人写了三个类分别为PhoneBook.TelephoneItem.Ui TelephoneItem: package com.hpe.test; public class TelephoneI ...
最新文章
- Java swing实现Visio中对直线、曲线、折线的画及拖动删除
- 使用 Arthas 排查开源 Excel 组件问题
- xcode windows版安装使用教程
- 有前途的程序员的14个习惯,你有几个?
- mysql5.7.17初始化_mysql5.7.17初始化求助 - 墨天轮问答
- Android笔记 fragment的生命周期
- 电商夏季促销海报设计PSD模板,分解教你如何设计
- 微型计算机主机箱内所有部件均由,《计算机应用基础》模拟试题
- mysql联合索失效_mysql 联合索引生效的条件、索引失效的条件
- mysql主从与读写分离_MySQL主从复制与读写分离
- 有关wxGLCanvas的问题
- Kent Beck : 领导的敏捷潮
- 【产品】什么是虚位密码及其用途
- 月下夜想曲200.6(攻略2)
- NLP(9): 机器学习介绍,朴素贝叶斯,python高阶函数应用
- 重装 Windows 系统后键乱码解决方案
- asp通用数据库连接类 access mssql mysql_asp.net 连接mssql mysql access Excel 2007数据库
- 2020年哨兵数据批量下载(USGS)
- 动态获取织梦CMS最新更新 利于收录的SiteMap.php文件
- Linux用户的授权与文件的权限管理