Content Provider 属于Android应用程序的组件之一,作为应用程序之间唯一的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的借口。
Android 系统为一些常见的数据类型(如音乐、视频、图像、手机通信录联系人信息等)内置了一系列的 Content Provider, 这些都位于android.provider包下。持有特定的许可,可以在自己开发的应用程序中访问这些Content Provider。第一:首先得知道该平台的地址.这里也就是ContentProvider的身份证,因为所有的操作都是经过ContentProvider的.
看上面程序,自定义一个MyContentProvider,它继承ContentProvider,在清单配置文件里,ContentProvider有一个属性authorities,这就是ContentProvider的身份证,所以一般为了保证唯一性,使用包名的方式命名.
ContentProvider提供几个重要的函数,MyContentProvider必须重载,这些函数(inset,query,update,delete)顾名思义就知道是对数据的操作.
这里用了Android自带的Sqlite数据库来存储平台的数据(当然也可以用其他的方式存储),所以MyContentProvider重载的函数其实是对sqlite数据库的操作.
为了方便操作数据库,这里用到android sdk提供SQLiteOpenHelper这个类.
第二:就知道ContentProvider身份还不行,你还需要告诉ContentProvider具体要操作什么数据.
当然前提是平台已经将数据类型公开了,比如这里只有联系人信息数据.
数据是以Uri的形式向外公开的.
这里简单介绍一下ContentProvider规定数据形式的URI组成:
主要包括三个部分
一:scheme
ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
二:主机名
主机名(或叫Authority)用于唯一标识这个ContentProvider,比如这里com.cj.mycontentprovider,外部调用者可以根据这个标识来找到它。
三:path
路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如上面程序:
要操作contact表/contact
上面三个部分是主要的,还可以有更详细的,比如还包含数据id /contact/id。
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.cj.mycontentprovider/contact").
然后再介绍一下UriMatcher类使用:
因为Uri代表了要操作的数据,所以我们经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher和ContentUris 。掌握它们的使用,会便于我们的开发工作。
UriMatcher类用于匹配Uri,它的用法如下:
if(uriMatcher.match(uri) == CONTACT)
首先第一步把你需要匹配Uri路径全部给注册上,如下:
uriMatcher.addURI("com.cj.mycontentprovider","contact",CONTACT);
注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用 addURI()方法传入的第三个参数。
再看一下ContentUris
ContentUris类用于操作Uri路径后面的ID部分,它有个比较实用的方法:
withAppendedId(uri, id)用于为路径加上ID部分:
u = ContentUris.withAppendedId(uri,d);
15万+

被折叠的 条评论
为什么被折叠?



