Android核心组件之ContentProvider(二)--创建自己的ContentProvider

本文详细介绍了如何创建和使用自定义的ContentProvider,包括Content Uri和MIME类型的设置,以及如何实现跨应用数据共享。
摘要由CSDN通过智能技术生成

转载请注明出处http://blog.csdn.net/yegongheng/article/details/38013931


自定义Content Provider初步分析

前几篇博文我们基本了解了Android系统自身所提供的Content Provider的特点,并学习了如何访问其所提供的数据接口。今天我们将来学习如何自定义Content Provider,以及如何访问、操作自定义Content Provider所封装的数据。
       首先,我们来确定一下我们在哪些情况下需要自定义Content Provider:
       (1)当本应用需要向其它应用提供大量的数据和文件时,需要自定义Content Provider,为其它应用访问数据提供统一的数据接口;
       (2)当本应用允许用户拷贝大量数据到其它应用时,需自定义Content Provider;
       (3)当需要使用搜索框架来创建一个搜索引擎时,需自定义Content Provider。
需要注意的是,在实际开发中,当对SQLite数据库中的数据操作只在本应用使用时,我们不需要另外自定义Content Provider,直接操作SQLite数据库就行。 我们知道,Content Provider 它本身并不负责数据的存储,它的 作用主要就是为其它应用访问数据提供一个统一的接口,那Content Provider一般支持哪些数据作为其访问接口呢?一般来讲,支持两种数据存储类型:
      (1)文件数据:包括SharedPreference存储的xml格式的数据、文件设备存储的文件数据等;
      (2)结构化数据:一般包括存储在数据库、数组和类结构化的数据。

Content Uri

      在(Android四大组件只Content Provider--初步学习)这篇博客中我们初步学习一下Content Uri组成方式及作用,今天我们学习自定义Content Provider需要频繁用到Content Uri,因此需要对其进一步深入学习。那么通过前面的学习,我们知道了Content Uri一般是由三部分组成:
     (1)content://:该字符串为content uri的特殊标识,此字符串为Content Uri所必须的头部信息
     (2)授权(Authority):用于唯一标识这个Content Provider,外部访问者可以根据这个标识找到它。
     (3)路径(Path):所需要访问数据的路径,根据业务而定。
在Content Uri组成部分中,Authority字符串我们可以任意命名,但每一个Content Provider的Authority字符串必须具有唯一性,因为该Authority就像数据库中表字段中的主键一样,系统是根据该Authority来定位到具体的Content Provider,从而使外部访问者获取到指定的信息。不过一般来讲,Authority的命名有一定组成规则,为确保Content Provider的Authority字符串的唯一性,一般按以下命名规则来命名Authority:com.company-name.ContentProvider-name。比如说我们下面将学习的一个例子中,自定义的一个MyContentProvider的内容提供者,company-name为androidleaf。那么在AndroidManifest.xml中注册provider时的代码如下:
 <provider 
     android:name="com.androidleaf.contentprovider.myprovider.MyContentProvider" <!--自定义的Content Provider名称  -->
     android:authorities="com.androidleaf.MyContentProvider" <!-- 定义Authority字符串名称 -->
     android:exported="true" <!--是否允许其它应用访问 -->
     />
假设上面自定义的MyContentProvider既提供了一系列Persons个人信息,又提供了Company个人所属的公司信息,那么外部访问者需要各自访问两者的信息,就必须根据不同的路径进行访问,那访问Persons信息的Path(路径)可以定义为persons,那访问Persons的Content Uri为 content://com.androidleaf.MyContentProvider/persons,访问Company信息的Path(路径)可以定义为company,那访问Company的Content Uri为 content://com.androidleaf.MyContentProvider/company。那如果要访问Persons中的具体的某一条person数据,则需怎么定义Content Uri呢,其实很简单,只需定义清楚所需要查询的数据的具体路径就行,比如需要查询person信息集中的第3条数据,则Content Uri应该定义如下:


MIME类型

       使用Content Provider可以返回数据文件的MIME类型,有关Android中MIME类型的更多知识,可以学习(Android MIME类型)这篇文章。

跨应用访问自定义Content Provider的数据

       好了,学习完自定义Content Provider所需要预备知识后,我们来通过一个实例来具体地学习如何创建自己的Content Provider。在动手实现之前,我们先整理一下实例所需完成的功能及实现思路。首先在SQLite数据库中创建一个person表,并添加数条Person数据,然后自定义一个Content Provider为访问person表中的数据提供一个标准的访问接口,然后创建另一个新的应用,并在新的应用中通过getContentResolve()方法获取person表中的数据,并实现对Person信息的增删改查操作。下面是我们实例程序的列表清单,如下图:
    
该应用负责创建数据库表,初始化表数据以及自定义Content Provider数据接口。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值