作者:王娇
Content Prodvider 类实现了一组标准的方法,能够让其他的应用保存或读取此内容提供处理的各种数据类型。在Android中,Content Provider 是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取和操作数据。并且,Android自身也提供了现成的Content Provider: Contacts、Browser、CallLog、Settings、MediaStore。应用可以通过唯一的ContentProvider,然后就可以用ContentResolver界面来使用具体的某个Content Provider,然后就可以用ContentResolver提供的方法来使用你需要的Content Provider了。其中,ContentResolver提供的方法包括query()、insert()、update()等。要通过用这些方法,还会涉及URI。你可以将它理解成string形式的Content Provider的完全路径。
下面我们通过ContentProvider获得电话本中的数据,然后显示到一个TextView中,在运行程序之前我们先看看电话本中存储的电话号码,如图1。
图1 通讯录数据
首先我们要通过getContentProvider方法来获取一个ContentResolver对象,然后通过其query方法查询出符合标准的电话记录,最后将这些数据都显示在一个TextView中即可。具体代码如下:

这些模块,需要在AndroidManifest.xml声明,本例子中我们使用了读取联系人的API,因此,声明方式如下:
最后在TextView显示我们在通讯录上读到的数据。如图2所示:
注意:
1、 读取通讯录的电话号码
在本例子的代码的红色框里面的代码 { intnumberFieldColumnIndex =cursor.getColumnIndex(PhoneLookup.NUMBER);
Stringnumber = cursor.getString(numberFieldColumnIndex); } 会发生错误,读不到通讯录里面的电话号码,调试的过程中发现numberFieldColumnIndex获得值“-1”。因为2.0后,读取电话号码的API发生了改变的,所以读取手机代码因为
2、 Uses-permission的位置
应该放在<manifest>标签的下一级,而不是在<application>标签的下一级。