ContentProvider的详解

Contentprovider的介绍:

作为四大组件之一,ContentProvider意为内容提供者。ContentProvider管理有结构数据集的访问。它封装数据,提供了定义数据的安全机制。通俗的说,ContentProvider是一种数据包装器。它提供了统一的接口对数据进行操作,使用者不用关心数据是如何去存储以及数据类型到底是什么。一切都已经被Contentprovider封装好了。ContentProvider主要用于不同进程之间的信息共享。Android是基于Linux的,同时也是继承了Linux的文件管理方式,每个应用都是一个独立的进程,android为每个应用进程分配了独立的用户ID和用户组ID。并且这个应用程序被赋予了相应的读写权限,其他应用程序无权访问。这样做的好处就是保证了数据的安全性,任何事情都有两面性,所以在程序具有安全性的同时,造成了数据共享的不便。为了解决这个问题。Android四大组件之一的ContentProvider诞生了。

ContentResolver的介绍:

ContentProvider用来暴露数据,但是怎样处理数据,就要用到ContentResolver。当ContentProvider暴露数据后,其他应用程序就通过ContentResolver来操作数据,两者之间通过资源标识符Uri建立联系的。ContentResolver通过CRUD的增删查改来操作底层的ContentProvider的增删查改。

Uri的介绍:

content://throuity.path(id).Uri分为三部分,第一部分,content://是ContentProvide给定的协议。第二部分:authority。系统就是根据这个找到指定要操作的那个ContentProvider。只要访问指定的ContentProvider,这个就是固定的。第三部分是path,以为资源部分,当访问者需要不同的资源时,这个部分就是动态改变的。第四部分是id,可以具体指出uri的资源。

开发一个ContentProvider:

首先,你需要写一个子类来继承ContentProvider基类,该子类需要实现query(),insert(),update(),delete(),onCreate(),getType()等方法。然后在Manifest的清单文件中配置ContentProvider:

<provider

android:name=".MainProvider"

android:authorities="com.example.wc.mainprovider"

android:exported="true"/>

name为子类的名称,.MainProvider为类全名称的缩写。authorities则为ContentProvider对应的Uri。而exported:指定该属性是否被其他的应用所调用的,true为能够,false为不能够。

然后通过其他应用的ContentResolver来调用ContentProvider的CRUD,他们之前通过CRUD中的第一个参数Uri,该参数由ContentResolver调用这些方法传入的。那这样的话,Uri就显得很为重要,为了确切的知道程序需要实际处理的Uri。Android提供了一个UriMatcher工具类。该工具类主要有两个方法尤为重要。分别是:

addURI(String authority ,String path,int code):该方法向UriMatcher注册Uri。其中authority和path组合成为Uri,而code为Uri的标识码。

match(Uri uri):根据前面注册Uri的标识码来找到对应的标识码。如若没有则返回-1.

最后,在其他的应用中调用ContentResolver来处理ContentProvider暴露的数据。这样在保证数据的安全性前提下,又能在不同进程之间使用数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值