初识ContentProvider

ContentProvider是不同应用程序之间进行数据交换的标准API,ContentProvider以某种Uri的形式对外提供数据,允许其他应用程序访问或修改数据;其他应用程序使用ContentResolver根据Uri去访问操作指定数据。

介绍Uri:例如如下Uri: content://com.oliver.providers.myproviders/words

它可分为如下三个部分:

①content://:这个部分是Android的ContentProvider规定的,就像是上网的协议默认是http://一   样。暴露ContentProvider、访问ContentProvider的协议默认是content://。

②com.oliver.providers.myproviders:这个部分就是ContentProvider的authority。系统就  是由这个部分来找到操作哪个ContentProvider。只要访问指定的ContentProvider,这个部分总是固 定的。

③words:资源部分(或者说数据部分),当访问者需要访问不同资源时,这个部分是动态改变的。

为了将一个字符串转换成Uri,Uri工具类提供了parse()静态方法,例如:Uri uri = Uri.parse("......");

前面已经提到,ContentProvider相当于一个"网站",它的作用是暴露可供操作的数据,其他应用程序通过ContentResolver来操作ContentProvider所暴露的数据。

  Context提供了如下方法来获取ContentResolver对象:getContentResolver(),一旦在程序中获得ContentResolver对象之后,接下来就可调用ContentResolver的方法来操作数据。insert(...),delete(...),uadate(...),query(...);

  从ContentResolver、ContentProvider和Uri的关系来看,无论是ContentResolver,还是ContentProvider,它们所提供的CRUD方法的第一个参数都是Uri,也就是说,Uri是ContentResolver和ContentProvider进行数据交换的标识。ContentResolver对指定的Uri执行CRUD等数据操作,但Uri并不是真正的数据中心,因此这些CRUD操作会委托给该Uri对应的ContentProvider来实现,通常来说,假如A应用通过ContentResolver执行CRUD操作,这些操作都需要指定Uri参数,Android系统就根据该Uri找到对应的ContentProvider(B应用),ContentProvider则负责实现CRUD方法,完成对底层数据的增、删、改、查等操作,这样就可以让A应用访问、修改B应用的数据。

开发ContentProvider只要两步:

①开发一个ContentProvider的子类,该子类需要实现insert(),delete(),update(),query(),onCreate(),getType()等方法

②在AndroidManifest.xml文件中注册该ContentProvider,指定name,authorities,exported等属性。

配置ContentProvider如:

<provider

android:name=".FirstProvier"

android:authorities="com.oliver.providers.myprovider"

android:exported="true"

/>

name:指定该ContenProvider的实现类的类名。

authorities:指定该ContentProvider对应的Uri(相当于为该ContentProvider分配一个域名)

android:exported:指定该ContentProvider是否允许其他应用程序调用。如果将该属性设为false,那么该ContentProvider将不允许被其他应用程序调用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值