Android学习(四)——四大组件之ContentProvider

ContentProvider的基础使用

ContentProvider是什么

ContentProvider, 内容提供者,它管理Android以,结构化方式存放的数据,它以相对安全的方式封装数据并且提供简易的处理机制。ContentProvider提供不同进程间数据交互的标准化接口,是应用程序之间共享数据的一种接口机制,是一种更为高级的数据共享方法。

  • ContentProvider可以指定需要共享的数据,而其他应用程序则可以在不知道数据来源、路径的情况下,对共享数据进行增删改查等操作
  • 在Android系统中,许多Android系统内置的数据也是通过ContentProvider提供给用户使用,例如通讯录、音视频文件和图像文件等

ContentProvider,Uri,ContentResolver

ContentProvider是允许不同应用进行数据交换的标准的API,ContentProvider以Uri的形式对外提供数据的访问操作接口,而其他应用则通过ContentResolver根据Uri去访问指定的数据。

一旦某个应用通过ContentProvider暴露了自己的数据接口,那么不管该应用程序是否启动,其他程序都可以通过该接口来操作自己的数据接口来操作其内部的数据,包括增加数据,删除数据,修改数据,查询数据等.

Uri——通用资源标识符(Uniform Resource Identifier)

是一个用于标识某一互联网资源名称的字符串 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义

Uri由三个部分:访问资源的命名机制(ContentProvider的默认为content)、存放资源的主机名、资源自身的名称组成,使用的URI语法结构如下:

content://<authority>/<data_path>/<id>
  • content:// 使用的是content协议,属于默认规定
  • < authority > 是授权者名称,用来确定具体由哪一个ContentProvider提供资源,通常是类的小写,以确保资源授权者的唯一性。
  • < data_path > 是数据路径,用来确定请求的是哪个数据集。
  • < id > 是数据编号,用来唯一确定数据集中的一条记录,匹配数据集中_ID字段的值(如果请求的数据不只一条,< id >可以省略)。

ContentProvider的使用离不开Uri类的支持,在自己的继承类中使用UriMatcher,根据UriMatcher.match(Uri uri)返回的表示符,进行不同范围,不同数据集的操作。

ContentResolver(内容解析器)

外界的程序通过ContentResolver可以访问ContentProvider提供的数据;

一旦定义好自己的ContentProvider类,就可以使用ContentResolver进行访问操作了。ContentResolver类的方法都会在其内部调用URI主机部分确定的ContentProvider,ContentProvider实现了底层数据的增,删,查,改的功能.

使用:

 Cursor cs = getContentResolver().query();

具体操作与数据库query方法相同

系统常用Uri

android系统管理联系人的URI如下:
ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri
ContactsContract.CommonDataKinds.Phone.CONTENT_URI 管理联系人的电话的Uri
ContactsContract.CommonDataKinds.Email.CONTENT_URI 管理联系人的Email的Uri

(注:Contacts有两个表,分别是rawContact和Data,rawContact记录了用户的id和name,data表中有Email的信息)

  • 其中id栏名称为:ContactsContract.Contacts._ID
  • name名称栏为ContactContract.Contracts.DISPLAY_NAME
  • 电话信息表的外键id为ContactsContract.CommonDataKinds.Phone.CONTACT_ID
  • 电话号码栏名称为:ContactsContract.CommonDataKinds.Phone.NUMBER..

  • Email地址栏名称为:ContactsContract.CommonDataKinds.Email.DATA

  • 其外键栏为:ContactsContract.CommonDataKinds.Email.CONTACT_ID

android为多媒体提供的ContentProvider的Uri如下:
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 存储在sd卡上的音频文件
MediaStore.Audio.Media.INTERNAL_CONTENT_URI 存储在手机内部存储器上的音频文件

MediaStore.Audio.Images.EXTERNAL_CONTENT_URI SD卡上的图片文件内容
MediaStore.Audio.Images.INTERNAL_CONTENT_URI 手机内部存储器上的图片
MediaStore.Audio.Video.EXTERNAL_CONTENT_URI SD卡上的视频
MediaStore.Audio.Video.INTERNAL_CONTENT_URI 手机内部存储器上的视频

短信URI: Content://sms

发送箱中的短信URI: Content://sms/outbox

(相应栏名称address, subject(标题), time)

最后记得在AndroidManifest.xml声明读写权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

自定义ContentProvider

这个我暂时还没用过,等我用过了我再补上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值