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的更多相关文章

  1. Android Content Provider Guides

    Android Content Provider Guides Content Providers管理对结构化数据集的访问.它们包装数据,并且提供一种定义数据安全的机制. Content provid ...

  2. Android Content Provider基础

    Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...

  3. (转载)Android content provider基础与使用

    android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了.在Android中,co ...

  4. Android Content Provider简介

    Content Provider是Android的四大组件之一,与Activity和Service相同,使用之前需要注册: Android系统中存在大量的应用,当不同的应用程序之间需要共享数据时,可以 ...

  5. Android Content Provider的启动过程源码分析

    本文參考Android应用程序组件Content Provider的启动过程源码分析http://blog.csdn.net/luoshengyang/article/details/6963418和 ...

  6. 6、Android Content Provider测试

    如果你的应用中使用了Content Provider来与其他应用进行数据交互,你需要对Content Provider进行测试来确保正常工作. 创建Content Provider整合测试 在Andr ...

  7. [Android] Content provider, ContentResolver

    Content provider的作用: Content providers manage access to a structured set of data. They encapsulate t ...

  8. [典型漏洞分享]exported Android content provider引发的隐私泄露问题

    YS android手机APP对外开放多余的content provider,可任意增.删.改和查images数据库表格,导致隐私泄露 问题描述: YS android手机APP使用SQLITE数据库 ...

  9. Android Content Provider Security(转)

    四大组件之一-content provider安全详解 原帖地址:http://drops.wooyun.org/tips/4314 0x00 科普 内容提供器用来存放和获取数据并使这些数据可以被所有 ...

  10. android Content Provider介绍

    ContentProvider(内容提供者)是Android中的四大组件之一.主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过Conte ...

随机推荐

  1. JAVA编程规则【转自java编程思想】

    本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在 ...

  2. scrollView实现基础中心点缩放及与UIPageControl结合使用

    一般来说scrollView与UIPageControl都是结合使用,因为在使用滚动视图的时候 ,使用UIPageControl,用户可以 清楚 的明白显示的内容有多少页,如果 没有的话,总不能让用户 ...

  3. linux tr命令详解

    通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能.您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符.您也可以用它来除去重复 ...

  4. json2.js源码解读记录

    相关内容:json详细用法.js语法.unicode.正则   json特点--最简单.最小巧的经典js库.   json作者:道克拉斯.克劳福德(Douglas Crockford)--js大牛 出 ...

  5. EAS linux挂载数据盘

    查看数据盘名称 fdisk -l 假设没有挂载的数据盘为/dev/xvdb 格式化数据盘 mkfs.ext3 /dev/xvdb 添加自动挂载 mkdir /data echo '/dev/xvdb ...

  6. MFC 实现字符串的移动

    在视类添加一个WM_KeyDown,然后实现函数写上 switch(nChar) {.. CRect rc; GetClientRect(&rc);   int nWidth = rc.Wid ...

  7. Towers of Hanoi

    Your mission is to move the stack from the left peg to the right peg. The rules are well known: Only ...

  8. Python—元组tuple

    列表的知识其实就类似于c语言中的数组,可插入.修改.list=[a,b,c,d] 而元组tuple,一旦初始化即不可修改.好处与绝对安全. 定义一个空的元组:t=() 定义只有一个元素的元组:t=(1 ...

  9. web.py+mysql插入中文提示query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 86-100

    对于中文编码的问题,总会出现各种各样恶心的错误,还不知道应该怎么解决,首先,你从最开头就应该关注编码问题,尽量保证所有的编码方式都是一致的 用python+web.py+mysql来写程序,首先要保证 ...

  10. The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProv

    在mybatis配置文件config.xml中报错: The content of element type "configuration" must match "(p ...