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 ...
随机推荐
- 【c++版数据结构】之顺序表的实现
SeqList.h #ifndef SEQLIST_H #define SEQLIST_H #include<iostream> using namespace std; typedef ...
- 我是怎么从项目中的lib加JAR更换为maven管理的
原来我对maven的使用应该还是去年的时候吧,当时对maven并不感冒(请不要吐槽哈),认为为什么一定要用maven来管理呢,我自己管理jar不是一样么,当时还认为自己管理jar还各种方便还对mave ...
- hdu 2604 Queuing (矩阵高速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 5375 Gray code(2015年多校联合 动态规划)
题目连接 : 传送门 题意: 给定一个长度为的二进制串和一个长度为n的序列a[],我们能够依据这个二进制串得到它的Gray code. Gray code中假设第i项为1的话那么我们就能够得到a[i] ...
- Java -- XML解析工具dom4j
前言 XML现已成为一种通用的数据交流方式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便,对于XML的解析有四种方式:DOM生成和解析XML文档,SAX生成和解析XML文件 ...
- 【LeetCode】Palindrome Partitioning 解题报告
[题目] Given a string s, partition s such that every substring of the partition is a palindrome. Retur ...
- poj_3468线段树成段更新求区间和
#include<iostream> #include<string.h> #include<cstdio> long long num[100010]; usin ...
- spark 朴素贝叶斯
训练代码(scala) import org.apache.spark.mllib.classification.{NaiveBayes,NaiveBayesModel} import org.apa ...
- nyoj--747--蚂蚁的难题(三)(dp背包)
蚂蚁的难题(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:4 描述 蚂蚁终于把尽可能多的食材都搬回家了,现在开始了大厨计划. 已知一共有 n 件食材,每件食材有一个美味度 ...
- POJ 2188线段树求逆序对
题目给的输入是大坑,算法倒是很简单-- 输入的是绳子的编号wire ID,而不是上(或下)挂钩对应下(或上)挂钩的编号. 所以要转换编号,转换成挂钩的顺序,然后再求逆序数. 知道了这个以后直接乱搞就可 ...