本文包含以下知识点:

  ContentProvider
  Uri 的介绍
  ContentResolver:

  监听ContentProvider的数据改变


一:ContentProvider部分

ContentProvider的作用:

  Content providers store and retrieve data and make it accessible to all applications. They're the only way to share data across applications;

there's no common storage area that all Android packages can access.

  内容提供者作为一个应用程序共享其数据的唯一接口供其他的应用程序访问。比如我开发一个程序:想访问联系人,那么就必须通过联系人里的ContentProvider来获取数据。

  而如果别的应用程序想访问我的数据,必须看我个人的意愿,我意愿创建什么样的ContentProvider愿意共享出什么数据,别人才能看到这些数据。可以理解为我有意通 过

  ContentProvider来暴露我的数据。

ContentProvider的数据存储的形式:

  Content providers expose their data as a simple table on a database model, where each row is a record and each column is data of a particular type and meaning.

  以表格的形式暴露数据:

  For example, information about people and their phone numbers might be exposed as follows:

  

  Every record includes a numeric _ID field that uniquely identifies the record within the table. 每一条记录都会有一个唯一的ID用于索引数据。

ContentProvider的创建:(注意创建完ContentProvider之后一定要在清单文件中进行配置)

  创建步骤如下:

  

  那用中文解说就是:

    1.找到一个你喜欢的方式来存储数据。

    2.继承ContentProvider的类,注意:继承这个类的时候要重写以下六种方法来供调用:

    query() //查询数据,结果集以Cursor返回
    insert() //插入数据
    update() //更新数据
    delete() //删除数据。上面四个方法的第一个参数都要传入一个Uri对象。
    getType() 
    onCreate()

    3.在清单文件中进行配置://自己定义了一个ContentProvider一定要告诉别人不然人家怎么知道呢

      To let the Android system know about the content provider you've developed,

         declare it with a <provider> element in the application's AndroidManifest.xml file.

      Content providers that are not declared in the manifest are not visible to the Android system

      

    配置时还有一个重要的参数:exported,表示该provider对象能否被其他程序访问,当然是true;

   注意:以上的配置是最为简单的配置,所有人只要知道了Provider的uri就能直接访问,实际可能需要加上permission权限来提高权限。

二:Uri部分:

  Uri是实现数据共享的桥梁是Android资源的唯一标识,相当于web中的URL一样。

public static final Uri CONTENT_URI = 
               Uri.parse("content://com.example.codelab.transportationprovider");

    


三:ContentResolver:

ContentProvider的获取和使用就要结合:ContentResolver和Uri来一起配合:
  forexample:在我的应用程序里调用联系人:

    ContentResolver cr = getContentResolver();

    //获取系统的resolver对象,注意此时并不知道要操作哪一个provider的数据。

    //需要一个uri参数在调用参数时与之匹配

    

      CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");

    cr可以调用增删改查的方法,通过Uri的参数实际上是调用对应ContentProvider的增删改查的方法。


四:内容观察者:ContentObserver:

  当数据共享出来之后,可以通过相关方法使得Provider里的数据发生改变,Android提供了内容观察者ContentObserver来监听其数据的改变。

  在实际使用时,我们需要继承ContentObserver的类并重写onChange()方法用于监听数据的改变。

  为了监听指定ContentProvider的数据改变,还需要通过ContentResolver向指定Uri注册内容观察者监听器:

  

  参数介绍:1.uri指定ContentProvider。2.boolean值:假设:uri=content://abc,如果为true,则:content://abc/d数据改变就会触发监听,

        如果为flase:则不会触发。

        3自定义的ContentObserver.

Android之内容提供者ContentProvider的总结的更多相关文章

  1. [Android Pro] 内容提供者ContentProvider的基本使用

    一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.ContentProvider为存储和获取数据提 ...

  2. Android中内容提供者ContentProvider的详解

    1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...

  3. Android基础内容提供者ContentProvider的使用详解(转)

    1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不 ...

  4. [Android Pro] 监听内容提供者ContentProvider的数据变化

    转载自:http://blog.csdn.net/woshixuye/article/details/8281385 一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者 ...

  5. Android开发14——监听内容提供者ContentProvider的数据变化

    一.提出需求 有A,B,C三个应用,B中的数据需要被共享,所以B中定义了内容提供者ContentProvider:A应用修改了B应用的数据,插入了一条数据.有这样一个需求,此时C应用需要得到数据被修改 ...

  6. 安卓第十四天笔记-内容提供者(ContentProvider)

    安卓第十四天笔记-内容提供者(ContentProvider) ContentProvider--内容提供者 1.ContentProvider简介 ContentProvider是不同应用程序之间进 ...

  7. Android 中内容提供者的使用

    在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现 ...

  8. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容

    一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...

  9. Android开发13——内容提供者ContentProvider的基本使用

    一.ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.ContentProvider为存储和获取数据提 ...

随机推荐

  1. SpringBoot非官方教程 | 第五篇:springboot整合 beatlsql

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot5-beatlsql/ 本文出自方志朋的博客 Be ...

  2. SQL3120W 不能将xx的字段值转换成 INTEGER值

    一次用DB2 Load/Import导入数据时,报错,提示SQL3120W 不能将xx的字段值转换成 INTEGER值,但目标列不可为空.未装入该行. 目标表: CREATE TABLE TEST( ...

  3. 没有上司的舞会(树形DP)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  4. DOM查询

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. (Linux 日常命令)[20171225]

    目的:记录Linux日常所用命令 [20171222]Linux环境下查看硬件组件型号 cat /proc/cpuinfo及lspci 查看CPU [root@t-redhat- ~]# cat /p ...

  6. git 错误 RPC

    remote: Enumerating objects: 3772, done. error: RPC failed; curl 18 transfer closed with outstanding ...

  7. 编程 - 前端 - JavaScript - 库 - ECharts (开源可视化)

    ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等) ...

  8. DevOps - 版本控制 - Bitbucket

    Bitbucket 使用139邮箱无法收到注册邮件 https://bitbucket.org

  9. Java OOP——第一章 对象和封装

    1.软件出现的目的: 用计算机的语言描述现实世界 用计算机解决现实世界的问题   ◆面向对象设计和开发程序的好处:    交流更加流畅    提高设计和开发效率 计算机语言的发展向接近人的思维方式演变 ...

  10. .net core 发布到docker

    1. 安装docker-desktop,windows环境安装包 官方网站:https://www.docker.com/ 2.注册登陆Docker账号 安装成功后,在官方网站注册一个账号,使用账号登 ...