您的位置:首页 > 移动开发 > Android开发

Android技术成长之路(四大组件之ContentProvider)

2016-12-18 22:27 337 查看

1内容提供者概述

ContentProvider将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver对象,调用它的方法作为替代。ContentResolver可以与任意ContentProvider进行会话,与其合作来对所有相关交互通讯进行管理。

2 ContentProvider的架构

授权的注册:

与网站一样,设备上的每个ContentProvider都会使用字符串注册自身,这个字符串类似于域名,在Android中称为授权(authority)。这个可唯一标识的字符串是此ContentProvider可提供的一组URI的基础。一般来说,这类似于拥有域的网站提供一些URL来公开其文档或内容。

ContentProvider授权的注册在AndroidManifest.xml文件中进行,并且和Android其他三大组件并列是application的子元素。下面给出了在Androidmanifest.xml中注册ContentProvider的两个示例:

 

<providerandroid:name="SomeProvider"

android:authorities="com.your-company.SomeProvider"

android:exported=“true”/>

<providerandroid:name="NotePadProvider"

android:authorities="com.google.provider.NotePad"/>

 

name部分为ContentProvider类的类名。

Authorities指定ContentProvider对应的Uri。

Exported指定该ContentProvider是否允许其他应用调用。

Android 内容URI的结构

要从ContentProvider获取数据,需要做的就是调用一个URI。Uri指定了将要操作的ContentProvider,其实可以把一个Uri看作是一个网址,我们把Uri分为四个部分。

Android MIME类型的结构

MIME用来描述资源的数据类型。这里所说的资源可以是各种多媒体数据,比如:html,xml,图片(JPEG),视频(avi),音频(mp3)。

根据MIME类型规范,MIME类型包含两部分:类型和子类型。例如:text/html,text/css,text/xml等等。

对于单条记录,MIME类型类似于:

vnd.android.cursor.item/vnd.your-company.content-type

而对于记录的集合,MIME类型类似于:

vnd.android.cursor.dir/vnd.your-company.content-type

3 几种相关工具类

UriMatcher类使用介绍

UriMatcher sMatcher = newUriMatcher(UriMatcher.NO_MATCH);

UriMatcher工具类主要提供如下两个方法:

void addURI(Stringauthority,String path,int code):该方法用于向UriMatcher对象注册Uri。其中authority和path组合成一个Uri,而code则代表该Uri对应的标识码。

Int match(Uri uri):根据前面addURI()注册的uri来判断指定Uri的标识码,如果找不到匹配的标识码,则返回-1。

ContentUris类使用介绍

withAppendedId(uri, id):用于为路径加上ID部分:

Uri uri =Uri.parse("content://com.ljq.provider.personprovider/person")

Uri resultUri =ContentUris.withAppendedId(uri, 10);

//生成后的Uri为:content://com.ljq.provider.personprovider/person/10

 

parseId(uri)方法用于从路径中获取ID部分:

Uri uri =Uri.parse("content://com.ljq.provider.personprovider/person/10")

long personid = ContentUris.parseId(uri);//获取的结果为:10

ContentProvider类的方法

ContentProvider提供了诸如getType(),insert(), delete(), query()和update()之类的方法。用于实现对ContentProvider中数据的增删改查操作。而在实际应用中ContenProvider提供的方法就相当于给另一个应用的ContentResolver对象进行CRUD操作的接口,这些接口都通过Uri来沟通。

4.ContentProvider的使用步骤

当应用程序需要通过ContentProvider对外共享数据时,其步骤为:

1) 创建继承自ContentProvider类的子类并重写上面表格中的方法

2) 在AndroidManifest.xml使用<provider>对该ContentProvider进行配置

使用ContentResolver操作ContentProvider中的数据

当外部应用需要对ContentProvider中的数据进行添删修查时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。

ContentResolver cr = getContentResolver();

然后就可调用ContentResolver的query()、insert()、update()和delete()方法了è实际上是指定了Uri对应的ContentProvider的query()、insert()、update()和delete()。

5.ContentResolver的使用步骤

ContentProvider提供了一种统一的通过Uri实现数据操作的方式。其步骤为:

1. 在当前应用程序中定义一个ContentProvider。

2. 在当前应用程序的AndroidManifest.xml中注册此ContentProvider

3. 其他应用程序通过ContentResolver和Uri来获取此ContentProvider的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android