【正文】

一、ContentProvider简单介绍:

ContentProvider内容提供者(四大组件之中的一个)主要用于在不同的应用程序之间实现数据共享的功能。

ContentProvider能够理解为一个Android应用对外开放的接口。仅仅要是符合它所定义的Uri格式的请求,均能够正常訪问运行操作。其它的Android应用能够使用ContentResolver对象通过与ContentProvider同名的方法请求运行,被运行的就是ContentProvider中的同名方法。

所以ContentProvider有非常多对外能够訪问的方法,在ContentResolver中均有同名的方法,是一一相应的。来看
以下这一张图:

Android附带了很多实用的ContentProvider。可是本文临时不涉及到这么多(本文将学习怎样创建自己的ContentProvider)。Android中自带的ContentProvider包含:

  • Browser:存储如浏览器的信息。
  • CallLog:存储通话记录等信息。
  • Contacts Provider:存储联系人(通讯录)等信息。
  • MediaStore:存储媒体文件的信息。
  • Settings:存储设备的设置和首选项信息。

此外,还有日历、

ContentProvider的方法:

假设要创建自己的内容提供者,须要新建一个类继承抽象类ContentProvider,并重写当中的抽象方法。抽象方法例如以下:

  1. boolean onCreate()
    初始化提供者
  2.  
  3. Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
  4. 查询数据。返回一个数据Cursor对象。当中參数selectionselectionArgs是外部程序提供的查询条件
  5.  
  6. Uri insert(Uri uri, ContentValues values)
    插入一条数据。參数values是须要插入的值
  7.  
  8. int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
    依据条件更新数据
  9.  
  10. int delete(Uri uri, String selection, String[] selectionArgs)
    依据条件删除数据
  11.  
  12. String getType(Uri uri)
    返回MIME类型相应内容的URI

除了onCreate()和getType()方法外。其它的均为CRUD操作,这些方法中。Uri參数为与ContentProvider匹配的请求Uri,剩下的參数能够參见SQLite的CRUD操作,基本一致。

备注:还有两个很有意思的方法,必需要提一下。call()和bulkInsert()方法,使用call,理论上能够在ContentResolver中运行ContentProvider暴露出来的不论什么方法,而bulkInsert()方法用于插入多条数据。

Uri:

在Android中,Uri是一种比較常见的资源訪问方式。而对于ContentProvider而言。Uri也是有固定格式的:<srandard_prefix>://<authority>/<data_path>/<id>

  • <srandard_prefix>:ContentProvider的srandard_prefix始终是content://。

  • <authority>:ContentProvider的名称。

  • <data_path>:请求的数据类型。
  • <id>:指定请求的特定数据。

在ContentProvider的CRUD操作,均会传递一个Uri对象,通过这个对象来匹配相应的请求。

那么怎样确定一个Uri运行哪项操作呢?须要用到一个UriMatcher对象,这个对象用来帮助内容提供者匹配Uri。它所提供的方法很easy。仅有两个:

  • void addURI(String authority,String path,int code):加入一个Uri匹配项。authority为AndroidManifest.xml中注冊的ContentProvider中的authority属性;path为一个路径,能够设置通配符,#表示随意数字。*表示随意字符;code为自己定义的一个Uri代码。

  • int match(Uri uri):匹配传递的Uri,返回addURI()传递的code參数。

Android组件系列----ContentProvider内容提供者【1】的更多相关文章

  1. Android组件系列----ContentProvider内容提供者

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. Android组件系列----ContentProvider内容提供者【4】

    (4)单元測试类: 这里须要涉及到另外一个知识:ContentResolver内容訪问者. 要想訪问ContentProvider.则必须使用ContentResolver. 能够通过ContentR ...

  3. Android组件系列----ContentProvider内容提供商【5】

    2.执行query()方法,查询全部记录(眼下一共两条记录).后台输出效果例如以下: 经測试,其它方法也都是能够运行的. 事实证明,新建的另外一个project文件ContentResolverTes ...

  4. Android开发学习—— ContentProvider内容提供者

    * 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...

  5. android 53 ContentProvider内容提供者

    ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...

  6. android contentprovider内容提供者

    contentprovider内容提供者:让其他app可以访问私有数据库(文件) 1.AndroidManifest.xml 配置provider <?xml version="1.0 ...

  7. contentProvider 内容提供者

    http://blog.csdn.net/woshixuye/article/details/8280879 实例代码当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定 ...

  8. contentProvider内容提供者

    contentProvider内容提供者 15. 四 / android基础 / 没有评论   步骤 权限在application中注册 Source code     <provider an ...

  9. Android 进阶11:进程通信之 ContentProvider 内容提供者

    学习启舰大神,每篇文章写一句励志的话,与大家共勉. When you are content to be simply yourself and don't compare or compete, e ...

随机推荐

  1. 怎样注冊 diskgroup 到集群

    之前使用 renamedg  对 ora.CRS.dg 进行重命名ora.DUPCRS.dg 可是 renamedg 有个缺点就是无法将改动的信息同步到整个集群层面,并且改动前的dg 会依旧保留在集群 ...

  2. python学习之--安装IDE(eclipse+pydev)

    First steps download eclipse url:http://www.eclipse.org/downloads/ select Help -> Install New Sof ...

  3. L2CAP数据发送和接收

    ACL 链路在 Bluetooth 中非常重要,一些重要的应用如 A2DP, 基于 RFCOMM 的应用.BNEP等都要建立 ACL 链路,发送/接收ACL 包.跟大家一起来分析 ACL 包发送/接收 ...

  4. 【linux】——centos 分辨率配置

    用过centos的朋友肯定知道centos在默认安装的时候显示器的分辨率只有800*600,但是我们想把改成1024*768或者更大,怎么办呢,我也是试过了才知道,首先打开系统-管理-显示-硬件-显示 ...

  5. System.IO.FileLoadException异常

    未能加载文件或程序集“NHibernate, Version=4.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4”或它的某一个依赖 ...

  6. Windbg调试托管代码

    Windbg调试.net托管代码需要借助于SOS.dll,.Net 4.0的32位sos.dll的路径在C:\Windows\Microsoft.NET\Framework\v4.0.30319,64 ...

  7. Linux下查看mysql错误日志

    1.进入 mysql 安装目录 进入 data 目录(该目录存储的是数据库的数据) cd  /usr/local/mysql ll 进入 mysql 目录 ,发现 文件后缀 .err,即是mysql ...

  8. HDU 1010 Tempter of the Bone【DFS】

    学习剪枝的第一篇@_@学习别人的剪枝,一剪就是两天@_@---- 参看的这篇--http://blog.csdn.net/libin56842/article/details/8962512自己的小体 ...

  9. RocketMQ学习笔记(3)----RocketMQ物理结构和逻辑部署结构

    1. RocketMQ的物理结构 RecketMQ网络部署的特点: Name Server是一个几乎无状态特点,可集群部署,节点之间无任何信息同步的(相对于zookeeper是较为轻量级的). Bro ...

  10. 《Unix环境高级编程》读书笔记 第3章-文件I/O

    1. 引言 Unix系统的大多数文件I/O只需用到5个函数:open.read.write.lseek以及close 本章描述的函数经常被称为不带缓冲的I/O.术语不带缓冲指的是在用户的进程中对其不会 ...