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. Ubuntu 12.10使用apt安装Oracle/Sun JDK

    apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get ...

  2. 字符串str功能介绍

    1.name.__contains__ 包含 name1='eric'result = name.__contains__(er)   #name是否包含er,包含返回true,不包含返回fals p ...

  3. css之首字母大写 | 全部大写 | 全部小写 | text-transform

    div{text-transform:capitalize}首字母大写

  4. zend 快捷键

    Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前 ...

  5. vagrant系列教程(三):vagrant搭建的php7环境(转)

    原文:http://blog.csdn.net/hel12he/article/details/51107236 前面已经把vagrant的基础知识已经基本过了一遍 了,相信只要按着教程来,你已经搭建 ...

  6. WEB-INF下jsp跳转

    今天才知道:浏览器是不允许直接访问WEB-INF文件夹的 瞬间感觉自己好shi的有没有,纠结了2天 看来还得通过springMVC来跳,,,

  7. apache+tomcat分布式搭建

    windows 下Apache和tomcat整合 负载均衡session共享 准备工作: 1. Apache 2.2.4 下载地址:http://cztele1.skycn.com/down/apac ...

  8. 2016.02.17 JS DOM编程艺术 第四五六章

    看完这三章内容,集中精力,加快速度.

  9. 企业好助手U-Mail邮件服务器软件

    对于一家企业,最核心的是什么?有人说人才,有人说技术,也有人说是数据(信息),依小编来 看,这些答案都没错,人才会流动,技术在不断更新,唯有数据(信息),日积月累,将沉淀为公司历史的一部分,作为决策的 ...

  10. enum 枚举的使用

    在程序当中,我们经常定义一些常量来标识一些状态,类型等. 比如 定义订单的状态,可以定义为ORDER_STATUS_CANCEL = 1 表示订单状态为"订单已取消". 但是感觉定 ...