正在学习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了。
分享到:
相关推荐
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null); int i=0; String...
NULL 博文链接:https://zymic.iteye.com/blog/737643
NULL 博文链接:https://zymic.iteye.com/blog/737681
Android如何获取手机联系人信息,本文为大家揭晓。 获取手机联系人信息步骤: 1、获取 ContentResolver ContentResolver resolver = getContentResolver(); 2、resolver.query(*)查询信息 查询手机联系人的URI...
Android, the next-generation open mobile platform from Google and the Open Handset Alliance, is poised to become a significant player in the mobile device market. The Android platform gives developers...
Android 向所有用户的手机发送短信,类似于群发,现在最好不要使用这种功能,发代码仅是为了学习编程技巧: String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds....
android的SDK做了调整,相应的读取联系人资料有了变化。 这里提供的是如何在2.0包括2.1中读取联系人资料的代码
这个是android系统原生代码中的联系人代码,在源代码的packages文件夹下,需要做联系人相关工作的同仁们,可以解压后看一看,同时,附赠上一个博客链接http://blog.csdn.net/Kafka_88/article/details/50670406 ...
Android-ContactsContract联系人增删改查
import android.provider.ContactsContract.PhoneLookup; import android.database.Cursor; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener...
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST); } @Override protected void onActivityResult(int ...
A simple example that illustrates a few different ways for an application to implement support for the Android data backup and restore mechanism. Bluetooth Chat An application for two-way text ...
本文实例讲述了Android获取联系人头像的方法。分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id = null; String selection1 = ContactsContract.Contacts._ID + = + ...
import java.util.ArrayList;import java.util.HashMap; import android.app.Activity;import android.database....import android.provider.ContactsContract.CommonDataKinds.Phone;import android.widget.ListVie
代码很简单,就不多废话了 代码如下: //读取联系人 public static Uri CONTACTSURI = ... String[] projections = new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME}; Curso
Introducing the ContactsContract Content Providers 322 Modifying Content Provider Data 324 Adding Records 325 Updating Records 326 Deleting Records 327 Using Third-Party Content Providers 328 Summary...
The ContactsContract and CallLog Providers The CalendarContract Provider The MediaStore Provider Consuming Documents Providing Documents Encrypted Storage Packaging and Distributing Data Advanced ...
Android 获取系统联系人信息的实例 一、获取手机联系人姓名及手机号 //跳转到系统联系人应用 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); try { ...
本篇文档主要记录一下获取联系人的电话号码的一种方式。 1、选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = new Intent(Intent.ACTION_PICK, ContactsContract....
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.database.Cursor; import android.database.DataSetObserver;... import android.provider.ContactsContract