Content Provider

 

 Content Provider用来保存和检索数据,并且使得程序之间互相访问数据成为可能,,是跨应用程序共享数据的唯一方法。

Android为常用的数据类型(如:音视频,图片和联系方式等)提供了大量的Content Provider。它们被定义在android.provider包下面。通过这样定义好的Content Provider我们可以方便的进行数据操作。当然我们必须拥有适当的权限。

我们也可以自己来定义Content Provider共享我们的数据,方便用户的访问。 

 

我们是在ContentProvider中实现我们实际操作数据的方法的。但是,客户端调用时,我们用到了另外的一个接口,它就是ContentResolver。ContentResolver中提供和ContentProvider中对性的方法,我们是间接的通过操作ContentResolver来操作ContentProvider的。

ContentResolver通过应用程序的getContentResolver()方法获得,一般情况下,ContentProvider是单实例的,但是可以有多个ContentResolver在不同的应用程序和不同的进程之间和ContentProvider交互。 

 

ContentProvider是用URI对象来共享其数据的。一个URI对象必须以"content://"开头,接下来是URI的授权部分,这部分内容要和AndroidMainfest.xml配置文件中声明的授权内容一致,后面还可能有数据类型和记录ID。

通过URI可以使得ContentResolver知道和哪个ContentProvider对应,并且来操作哪些表以及哪些记录。

完整的一个URI如下

content://com.example.transportationprovider/trains/122

 

Android系统自带的核心应用程序中的ContentProvider对象,一个是Contact(通讯录),另一个是MediaStore(媒体存储)。 


自定义ContentProvider

要使用ContentProvider来操作数据,必须有保存数据的场所,可以使用文件或SQLite数据库的方式来保存数据,通常使用SQLite数据库。

为了访问数据,就要提供访问数据的接口。这里需要基础ContentProvider类,实现其中访问数据的抽象方法:query(), insert(), update(), delete(), getType(), onCreate().

定义好的ContentProvider必须在AndroidMainfest.xml配置文件中声明才能使用。声明中必须添加的参数是授权属性"android:authorities" 

1.创建保存数据的文件或数据库

2.定义一个类继承ContentProvider,实现抽象方法。

3. 将定义好的ContentProvider在AndroidMainfest.xml配置文件中声明,以便使用.

 

*引入BaseColumns接口,这个接口是一个常量接口,里面有一个"_id"和"_count"字符串常量,分别用来标示记录ID和记录总数. 

 

 

 

 

 

 

 

 

 

 

posted on 2011-10-21 15:32  猪总的小短裤  阅读(232)  评论(0)    收藏  举报