正在学习Android,想先找个简单点的东西练习一下,先想到的是通讯录,不过关于手机通讯录方面的资料在我现有的书和视频上都很少看到。没办法只有自己看SDK Docs了。
不管怎么说还是先赞Google的Android Docs,确实很全面,只要你想找就一定能找到你要的东西。不过我感觉想把里面的各个类的关系联系起来还是有点困难,特别是像英文水平过于一般的我,看的那叫个累呀。
好了,还是来说一下正题吧。Android刚开始在通讯录方面好像是提供的Contacts这个类,又在SDK2.0发布后新加了一个ContactsContract,然后就不建议用Contacts这个旧的类了。有新的东西,当然要用新的了。
对于ContactsContact官方文档里面说它是基于一个三层的数据模型存储的,由于本人不是专门搞软件,什么意思我也说不出来,个人的一个大致的理解就是,它是由三个主要的数据库组成的。这三个数据模型就是以ContactsContact.Data,ContactsContact.RawContacts,ContactsContact.Contacts。
三个模型的功能大致为,
Data:存储通讯录中每个人的全部信息,什么名字,电话,E-mail等一些乱七八糟和东西全在里面。
RawContacts:这个里面好像是说存储的是个人描述信息和一些唯一确定的相关的帐号
Contacts:这个好像是通讯录里面的一个人的基本描述,像什么显示的名字,分组情况,有没有电话号码之类的了。
反正后面两个搞的真是懵懵的,我先不管这两个了。因为Data里面说它包括通讯录里每个人的全部信息,以理论上说对通讯录的全部操作都可以用这个来搞定。所以我也是选的它,降低难度嘛。
关于Data,看一下文档里面的详细内容,里面主要说了一个“数据类型”(Data kinds),对应的是Data.MIMETYPE这个列。我们还是先不管这个,之后再说。我刚用的时候对它还很是纠结了一把。
Data里面也是含有对数据的“增删改查”四个基本操作,看到这里基本可以确定它肯定是一个数据库了。官方每个操作都提供了一些事例代码。第一次玩当然是从简单的“查”来入手了。
官方给的代码有两个,我主要看的第二个,因在后面的官方描述中CONTACT_ID好像就是RAW_CONTACT_ID:
1 |
Cursor c = getContentResolver().query(Data.CONTENT_URI, |
2 |
new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
|
3 |
Data.RAW_CONTACT_ID + "=?" + " AND "
|
4 |
+ Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'" ,
|
5 |
new String[] {String.valueOf(rawContactId)}, null );
|
这个代码里面一般至少都能意会出它是在做什么。就是通过联系人ID查找他的电话号码,电话类型,和电话标签。像里的Data._ID中的Data就是ContactsContact.Data,Phone.TYPE里面的Phone就是ContactsContract.CommonDataKinds.Phone。
通过上面的代码我们可以知道,要查找一个通讯录可以通过ContentResolver的query()方法来查找,最终返回一个游标Cursor,通过Cursor的get***方法就可以把想要的数据读出来了。关于query方法,可以说就一个生成一相格式化SQL语句的方法。它有五个参数,简单的理解就是(uri相当于要查询的表名,你要查询哪几个字段用String数组表示,查询条类似Where后面的部分,如果前面的参数里面有?的点位符这个参数就是它对应的值,排序)。
看了这个代码有点查询通讯录的概念了,不过现在可能有人就有问题要问了,官方的代码里面怎么不把联系人的姓名查出来,因为就算我们不懂代码,单看英文怎么也没有Name这类的单词啊。查联系人怎么说也要有名字有电话,不然要它干什么。是不是官方太懒了多加个字段不行么?
我这个外行人花了点时间的学习后,发现官方的这个代码好像还真查不了名字,或者说是专门来查电话的……
但是要同时得到姓名还对应的电话号码,我们才能算的上有点成果吧,现在的东西似乎还没多大用。
要完成这套流程,就要说一下我刚开始提到的那个所谓的“数据类型”Data.MIMETYPE了。
由于本人水平有限,如有错误,请尽量指正,共同学习嘛!
分享到:
相关推荐
5. **ContactsContract**:这是Android系统提供的一组接口和常量,用于与系统通讯录进行交互。开发者需要理解并使用ContactsContract类来读取和写入联系人信息。 6. **SQLite数据库**:Android系统使用SQLite作为...
这篇博客文章《android中ContactsContract获取联系人的方法》深入探讨了如何使用这个API来有效地获取和操作Android设备上的联系人数据。 首先,我们需要理解`ContactsContract`类的结构。它定义了一系列的常量和Uri...
在Android平台上,构建一个手机通讯录应用是一项常见的任务,它涉及到许多高级的开发技术。这份“Android高级应用源码-android手机通讯录.zip”提供了一个实际的案例,让我们深入探讨其中涉及的关键知识点。 首先,...
Android的通讯录基于Content Provider进行管理,其中`ContactsContract`类是访问联系人数据的核心接口。联系人数据分布在多个表中,如`ContactsContract.RawContacts`(原始联系人)、`ContactsContract.Data`(联系...
【Android 通讯录备份与还原】\n\n在Android系统中,通讯录是用户的重要数据之一,包含了联系人的姓名、电话号码、邮箱等关键信息。为了防止数据丢失,或者在更换设备时方便迁移数据,备份和还原通讯录功能显得尤为...
在Android系统中,访问和管理通讯录是常见的功能需求,涉及到Android框架中对联系人数据的API使用。本文将深入探讨如何在Android应用中实现访问通讯录中的联系人以及添加新联系人的步骤。 首先,我们需要了解...
ContactsContract类是Android提供的一个常量类,包含了与通讯录相关的URI、表名和列名等信息。 3. **查询通讯录**:使用ContentResolver的query()方法可以获取通讯录数据。例如,获取所有联系人的ID和名字: ```...
在这个实例中,我们将深入探讨如何使用Android通讯录的内容提供者来查询和添加联系人。 一、Android内容提供者基础 内容提供者是一个实现了ContentProvider类的组件,它负责存储、检索以及更新应用程序的数据。每个...
在Android系统中,通讯录是用户管理联系人信息的核心组件,它允许用户存储、编辑和检索个人和商业联系人的详细信息。本资源“Android高级应用源码-Android手机的通讯录联系人信息.zip”提供了深入理解和操作Android...
通过这个“获取通讯录程序源码”,开发者可以学习到如何在Android应用中集成通讯录功能,理解Android系统如何处理权限、查询数据以及构建用户界面的相关知识。这是一个很好的学习资源,特别是对于初学者或希望增强...
在Android平台上,获取手机通讯录的详细信息是常见的需求,比如开发一款应用需要展示用户的联系人列表。在给定的标题"Get-Phone-Contact-Details.rar_contact_get phone android"和描述中,我们可以理解这是一个关于...
综上所述,Android平台上的通讯录操作涵盖了权限管理、查询、插入、更新和删除等多个方面。了解并熟练掌握这些知识点对于Android开发者来说是必不可少的,特别是在开发涉及个人数据管理的应用时。通过实践,你可以更...
对于更详细的联系人信息,如电话号码或电子邮件,我们需要查询`ContactsContract.Data`表,并使用`contactId`作为过滤条件。例如,获取联系人的电话号码: ```java Uri phoneUri = Uri.withAppendedPath...
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); } ``` 这段代码会返回指定联系人的所有电子邮件地址,通过`ContactsContract.CommonDataKinds....
总结,ContactsContract是Android处理联系人数据的核心接口,涵盖了添加、删除、修改和查询等基本操作。通过熟练掌握其使用方法,开发者能够方便地实现与联系人相关的功能,为用户提供更好的服务。在实际项目中,...
在Android系统中,通讯录(Contacts)是...总结,Android通讯录开发涉及到权限管理、数据查询、信息解析、数据操作以及各种开发工具的使用。通过理解并熟练运用这些知识点,开发者能够构建出功能完善的通讯录管理应用。
7. **数据项和联系人**:在Android中,联系人是由多个数据项(如名字、电话号码、电子邮件地址)组成的,这些数据项通过`ContactsContract.Data`表关联到特定的联系人。 8. **分组和标签**:Android通讯录还支持...
String email = detailCursor.getString(detailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); vcfWriter.writeEmail(name, email, VCardType.WORK); } } detailCursor.close(); } ...
Android通讯录的分组管理是通过Content Provider接口实现的,涉及对`ContactsContract.Groups`和`ContactsContract.CommonDataKinds.GroupMembership`表的操作。正确理解和使用这些API,可以轻松实现通讯录的分组...
在Android平台上,对通讯录进行查询、修改、删除和增加是常见的功能需求,尤其是在开发涉及个人信息管理的应用时。本文将详细讲解如何实现这些操作,并基于提供的`contactsdemo`项目来探讨具体实践。 首先,要操作...