本文包含以下知识点:

  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. Nodejs做整站转发

    刚接触nodejs,做个东西练下手,通过nodejs直接转发整站,原本想把内容全翻译成英文,但google对流量行审查,被封IP,所以就没啥用了, 效果像这样 var b = function (a, ...

  2. NDK下载地址

    官方下载地址 http://developer.android.com/ndk/downloads/index.html 没有提供旧版下载链接,只能修改链接方式下载 http://dl.google. ...

  3. Es6的那些事

    现在看招聘网站上的要求,作为前端er~都要熟悉甚至精通(滑稽脸)es6,项目中也经常用,啥let,const,尤其是用react的同学,肯定对解构赋值不会陌生,今天逛淘宝前端的博客,看到一篇名为Es6 ...

  4. 19.springboot邮件服务服务器部署访问不到邮箱服务器解决方案

    1.前言 在Springboot项目的生产环境中,win系统环境下,邮箱服务是可以正常使用的. 当项目部署到阿里云服务器上之后,因为服务器端口采用安全组的方式,25端口访问不到. 在网上查找了一部分资 ...

  5. MySQL数据库主从(主主)配置

    一.系统环境: centos7.4 (centos 1708) mysql 5.7 master主机的IP地址为192.168.159.50 slave主机的IP地址为192.168.159.51 M ...

  6. Struts2中期(这框架目前正处于淘汰状态)

    Struts2的第二天 Struts2的第二天的内容 1. Struts2框架中的Servlet的API的使用 2. Struts2中Action接收请求参数 3. Struts2中自定义拦截器 案例 ...

  7. xcode7--iOS开发---将app打包发布至app store

    时隔3个月再次接触应用打包,又是一顿折腾 说说这次的感受吧: 变得是打包时间减少到4小时(其中大部分时间还是xcode7或者是iOS9的原因),不变的是还是一如既往的坑!! 好了,废话不多说,下面讲讲 ...

  8. 14.2 multiprocessing--多线程

    本模块提供了多进程进行共同协同工作的功能.由于Python存在GIL锁,对于多线程来说,这只是部分代码可以使用多CPU的优势,对于想全部使用多CPU的性能,让每一个任务都充分地使用CPU,那么使用多进 ...

  9. Plugin was not installed: Cannot download 'https://plugins.jetbrains.com/pluginManager''

    在Android studio中安装插件的时候,提示了类似这种的错误,解决这个问题有以下几步 1.打开Configure->Settings 2.System Settings->Upda ...

  10. dedesmc 手机端生成静态页

    dedesmc 手机端生成静态页 1.首先下载插件,下载地址:https://pan.baidu.com/s/1Nfx_KBYuxRkZ7VzoPxy28g 密码:83x7 2.进入 dedecms ...