Android组件系列----ContentProvider内容提供者【1】
【正文】
一、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】的更多相关文章
- Android组件系列----ContentProvider内容提供者
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android组件系列----ContentProvider内容提供者【4】
(4)单元測试类: 这里须要涉及到另外一个知识:ContentResolver内容訪问者. 要想訪问ContentProvider.则必须使用ContentResolver. 能够通过ContentR ...
- Android组件系列----ContentProvider内容提供商【5】
2.执行query()方法,查询全部记录(眼下一共两条记录).后台输出效果例如以下: 经測试,其它方法也都是能够运行的. 事实证明,新建的另外一个project文件ContentResolverTes ...
- Android开发学习—— ContentProvider内容提供者
* 应用的数据库是不允许其他应用访问的* 内容提供者的作用就是让别的应用访问到你的数据库.把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用. Uri:包含一个具有一定格式的字符串的对 ...
- android 53 ContentProvider内容提供者
ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...
- android contentprovider内容提供者
contentprovider内容提供者:让其他app可以访问私有数据库(文件) 1.AndroidManifest.xml 配置provider <?xml version="1.0 ...
- contentProvider 内容提供者
http://blog.csdn.net/woshixuye/article/details/8280879 实例代码当数据需要在应用程序间共享时,我们就可以利用ContentProvider为数据定 ...
- contentProvider内容提供者
contentProvider内容提供者 15. 四 / android基础 / 没有评论 步骤 权限在application中注册 Source code <provider an ...
- Android 进阶11:进程通信之 ContentProvider 内容提供者
学习启舰大神,每篇文章写一句励志的话,与大家共勉. When you are content to be simply yourself and don't compare or compete, e ...
随机推荐
- ofbiz初级教程
本教程是ofbiz 基本应用,它涵盖了OFBiz应用程序开发过程的基本原理.目标是使开发人员熟悉最佳实践,编码惯例,基本控制流程以及开发人员对OFBiz定制所需的所有其他方面. 本教程将帮助您在OFB ...
- android 读取xml
在有些应用中,有一点小数据.直接存储在XML就是.实现较为简单, 1.xml文件放入asset目录.结构如: <?xml version="1.0" encoding=&qu ...
- POJ 题目2774 Long Long Message(后缀数组,求最长公共子串长度)
Long Long Message Time Limit: 4000MS Memory Limit: 131072K Total Submissions: 23696 Accepted: 97 ...
- System.getProperty()方法可以获取的值
/** 获得当前类的完整路径.最后一句 */ package org.outman.dms.server; import java.net.MalformedURLException; import ...
- node 命令行输入控件 prompt.js
function print(){ console.log.apply(console , arguments) } var step ,_lstStp ,_onConfirmInput ,_ ...
- 安卓APP载入HTML5页面解决方式总结
因为H5页面在移动端的兼容性及扩展性方面体现出来的优势,又兼得APP中植入H5页面相应用的灵活性有大大的提升(如活动.游戏的更新等).APP开发不可避免的须要载入一些H5页面.但安卓client对网页 ...
- vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全
vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...
- Parquet学习总结
深入分析Parquet列式存储格式 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的 ...
- 【转载】Reactor模式和NIO
当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的结构:1. Read request2. Decode request3. Proc ...
- SSM博客实战(9)-拦截器验证权限和登录与注销的实现
转载 https://liuyanzhao.com/6300.html