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技术成长之路(四大组件之Activity)
- Android核心技术之(9)---四大应用组件之ContentProvider
- Android四大组件之一ContentProvider(内容提供者)
- 【Android基础入门〖6〗】四大组件之ContentProvider
- android四大组件--ContentProvider具体解释
- android四大组件之ContentProvider
- Android的四大组件之ContentProvider总结
- android四大组件之ContentProvider
- android 四大组件之ContentProvider
- Android学习日志13__四大组件04__ContentProvider
- Android 四大组件之一 ContentProvider
- Android四大组件之ContentProvider实现
- Android四大组件之ContentProvider(二)读取设备上的图片、音频和视频
- Android四大组件之ContentProvider
- android 四大重要的组件之ContentProvider
- Android四大组件之ContentProvider自定义
- 【Android基础入门〖6〗】四大组件之ContentProvider
- Android四大组件之ContentProvider
- android开发步步为营之34:四大组件之ContentProvider
- 【Android开发日记】之入门篇(九)——Android四大组件之ContentProvider