【正文】

一、ContentProvider简单介绍:

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

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

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

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

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

此外,还有日历、

ContentProvider的方法:

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

boolean onCreate()   
初始化提供者 Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
查询数据。返回一个数据Cursor对象。当中參数selection和selectionArgs是外部程序提供的查询条件 Uri insert(Uri uri, ContentValues values)
插入一条数据。參数values是须要插入的值 int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
依据条件更新数据 int delete(Uri uri, String selection, String[] selectionArgs)
依据条件删除数据 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. 【BZOJ 1211】 [HNOI2004]树的计数

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] prufer数列的应用 http://www.cnblogs.com/AWCXV/p/7626625.html 这一题没有节点的度数 ...

  2. OpenLDAP 2.4.44 安装 + phpLDAPadmin 安装

    网上太多的例子搞 OpenLDAP  + phpLDAPadmin  但是没有一个能让你成功配置起来.蛋疼得很.记录一下过程 系统版本:centos7.4 软件版本:2.4.44  超级重要,版本不对 ...

  3. urlEncoder和urlDecoder的作用和使用

    1.URLEncoder.encode(String s, String enc) 使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式 URLD ...

  4. Oracle字符乱码、数据越界訪问典型Bug分析

    Oracle字符乱码.数据越界訪问典型Bug分析 前言:           作为乙方,在甲方客户那里验收阶段发现两个诡异Bug. 下面就问题来源.问题根因.解决方式.怎样避免做具体描写叙述. .且两 ...

  5. 从QQ聊天看交流的有效性

    首先让我们看一则约10分钟的QQ群聊天记录.截图例如以下.已经进行了隐私保护. 交流的主体为大二的在校生与刚刚毕业的学长之间的对话,学长參加过培训,在校学弟想了解一下.故有了以下的交流.(从上到下,从 ...

  6. 设计网页录入信息与自己定义server数据接收

    需求:设计一个注冊网页用于录入username和登录password.并将数据传入server并显示出来. 1.前言:网页提交的 get 和 post 两种方式. (1)对于get提交方式,以本文中样 ...

  7. Eclipse 更新Android SDK后,新建项目出现appcompat_v7project的相关问题

    Eclipse 更新Android SDK后,新建项目出现各种问题.网上各种解决方式,搞了好久,总结一下. 1.出现error: Error retrieving parent for item: N ...

  8. javascript系列-class4.函数

    欢迎加入前端交流群来py: 转载请标明出处!                   在火影的世界中存在忍术,忍术是把强大的能量集中在一起以各种各样不同的形式发射出来.怎样使用各种各样的忍术那?通过结印. ...

  9. angular与angularjs常用指令的不同写法整理

    angularjs与angular 常用的指令写法的区别; 一:angularjs指令 1.ng-bind 使用给定的变量或表达式的值来替换 HTML 元素的内容 <p ng-bind=&quo ...

  10. 16.boost图深度优先遍历DFS

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...