Android--Content Provider
1、内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。
2、内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是创建自己的内容提供器给程序的数据提供外部访问接口。
3、ContentResolver 类用于读取其他应用程序的共享数据:
1)借助 ContentResolver 类可以访问内容提供器中共享的数据,该类的对象可以通过 Context 的 getContentResolver() 来获取;
2)ContentResolver 中提供了一系列的方法用于对数据进行CRUD 操作:
--insert() 方法用于添加数据;
--update()方法用于更新数据;
--delete()方法用于删除数据;
--query()方法用于查询数据;
--不同于 SQLiteDatabase 中的上述方法, ContentReslover的这些方法使用一个 Uri 参数,这个参数被称为内容 Uri;
--内容 Uri 给内容提供器中的数据建立了唯一标识,它主要由两部分组成:权限(authority)和路径(path),权限用于对不同的应用程序做区分,为了避免冲突,采用程序包名的方式进行命名;路径是是用于同一程序中不同的表做区分的,通常添加到权限后面;
--内容 Uri 的标准格式写法:content://com.example.app.provider/table1
4、使用 ContentProvider 为程序创建内容提供器:
1)可以通过新建一个类去继承 ContentProvider 的方式来创建一个自己的内容提供器;
2)需要重写6个抽象方法:
-- onCreate(): 初始化内容提供器的时候调用。通常用于对数据库的创建和升级等操作,返回true表示初始化成功,false表示初始化失败;只有当 ContentResolver 访问数据时,内容提供器才会被初始化;
-- query(): 查询数据;
-- insert(): 插入数据;
-- update(): 更新数据;
-- delete(): 删除数据;
-- getType(Uri uri): 根据传入的 uri 返回相应的 MIME 类型,一个内容URI 所对应的MIME字符串主要由三部分组成:
①必须以vnd 开头;
②如果内容URI 以路径结尾,则后接android.cursor.dir/,如果内容URI 以id 结尾,则后接android.cursor.item/;
③最后接上vnd.<authority>.<path>。
3)在配置文件中注册内容提供器:
<provider android:name=".DatabaseProvider" android:authorities="com.tt.sqlitedemo.provider" android:exported="true"/>
注:这里如果没有将 android:exported 属性设置为 true, 则程序运行时会报 java.lang.SecurityException 异常;这点书中没有提到,当时自己敲代码的时候程序总是崩溃,一调试才发现了这个异常;
Android--Content Provider的更多相关文章
- Android Content Provider Guides
Android Content Provider Guides Content Providers管理对结构化数据集的访问.它们包装数据,并且提供一种定义数据安全的机制. Content provid ...
- Android Content Provider基础
Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...
- (转载)Android content provider基础与使用
android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了.在Android中,co ...
- Android Content Provider简介
Content Provider是Android的四大组件之一,与Activity和Service相同,使用之前需要注册: Android系统中存在大量的应用,当不同的应用程序之间需要共享数据时,可以 ...
- Android Content Provider的启动过程源码分析
本文參考Android应用程序组件Content Provider的启动过程源码分析http://blog.csdn.net/luoshengyang/article/details/6963418和 ...
- 6、Android Content Provider测试
如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作. 创建Content Provider整合测试 在Andr ...
- [Android] Content provider, ContentResolver
Content provider的作用: Content providers manage access to a structured set of data. They encapsulate t ...
- [典型漏洞分享]exported Android content provider引发的隐私泄露问题
YS android手机APP对外开放多余的content provider,可任意增.删.改和查images数据库表格,导致隐私泄露 问题描述: YS android手机APP使用SQLITE数据库 ...
- Android Content Provider Security(转)
四大组件之一-content provider安全详解 原帖地址:http://drops.wooyun.org/tips/4314 0x00 科普 内容提供器用来存放和获取数据并使这些数据可以被所有 ...
- android Content Provider介绍
ContentProvider(内容提供者)是Android中的四大组件之一.主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过Conte ...
随机推荐
- virtualenv创建虚拟环境安装flask
virtualenv 有什么用?如果你象我一样热爱 Python ,那么除了基于 Flask 的项目外 还会有其他项目用到 Python .当项目越来越多时就会面对使用不同版本的 Python 的 问 ...
- ios异常(crash)输出
最近突然想起友盟的sdk附带的一个功能:将闪退异常情况上报服务器,(stackflow,github)找了一些资料,自己写了一个demo,想起来好久没有写过blog了,顺便分享. 其实不止是ios,a ...
- 【转】对抗拖库 ―― Web 前端慢加密
0×00 前言 天下武功,唯快不破.但密码加密不同.算法越快,越容易破. 0×01 暴力破解 密码破解,就是把加密后的密码还原成明文密码.似乎有不少方法,但最终都得走一条路:暴力穷举.也许你会说还可以 ...
- textContent 与innerText
转自下面这位大神: http://zhangyaochun.iteye.com/blog/1391370 其实关于这textContent与innerText有很多碎碎的东西,不过个人觉得还是一个不错 ...
- Jvm支持的最大线程数
摘自 http://blog.csdn.net/xyls12345/article/details/26482387 JVM最大线程数 (2012-07-04 23:20:15) 转载▼ 标签: jv ...
- Python学习笔记(二)基本语法
Class 2 一.交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,如下图: ...
- HTML、CSS和JS
一.html 1.web流程中的HTML HTML---->赤裸裸的人 CSS ---->穿华丽的衣服 JS ---->让人动起来 浏览器和server端之间的通信本质上是字 ...
- LinQ 高级查询
高级查询 模糊查(包含):.Contains(name) 开头:.StartsWith(name) 结尾:.EndsWith(name) 个数:.Count() 最大值:Max(r => r.p ...
- Linux内核分析第五周学习总结:扒开系统调用的三层皮(下)
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuO ...
- 第2章 C#中的泛型
2.1 理解泛型2.1.1 为什么要有泛型 并不一定要使用字符T作为类型参数的名称,也可以使用其他的字符,但习惯上使用T. 2.1.2 类型参数约束什么是“向下的强制转换(downcast)”?因为O ...