实现ContentProvider

创建ContentProvider的步骤:

1.开发一个ContentProvider的子类,该子类需要实现增、删、改、查等方法;

2.在AndroidMainfest.xml文件中注册该ContentProvider

开发ContentProvider时所实现的增、删、改、查方法都需要一个Uri参数,该参数决定了对那个Uri执行数据操作。

为了确定该ContentProvider实际能匹配的Uri,以及确定每个方法中Uri参数所操作的数据,android系统提供了UriMatcher工具类。

Uri工具类——UriMatcher主要提供了如下两个方法:

void addURI(String authority,String path,int code) 该方法用于向UriMatcher对象注册Uri.其中authority和path组成一个Uri,而code则代表该Uri对应的标识码
int match(Uri uri) 根据前面注册的Uri来判断指定Uri对应的标识码。如果找不到匹配的标识码,该方法将会返回-1

后续补充.....

  

监听ContentProvider的数据改变

ContentObserver简介

ContentProvider无论实现insert()、delete()、update()方法中的任何一个,只要该方法导致了ContentProvider里数据的改变,程序就调用了如下代码:

getContent.getContentResolver().notifyChange(uri,null)——用于通知所有注册在该Uri上的监听者,通知该ContentProvider所共享的数据发生了改变。

为了在应用程序中监听ContentProvider数据的改变,需要利用Android提供的ContentObserver基类.

监听ContentProvider数据改变的监听器需要继承ContentObserver类,并重写该基类所定义的onChange(boolean selfChange)

——当其监听的ContentProvider的数据发生改变时,onChange将会被触发。

为了监听指定的ContentProvider的数据变化,需要通过ContentResolver向指定的Uri注册ContentObserver监听器。

ContentResolver提供如下方法来注册监听器:

registerContentObserver(Uri uri,boolean notifyForDescendents,ContentObserver observer):

uri——该监听器所监听的ContentProvider的Uri; 

notifyForDescendents——如果该参数设置为true,假设注册监听的Uri为content:abc,那么Uri为Content://abc/xyz、content://abc/xyz/foo的数据改变时也会触发该监听器;

              如果该参数设置为false,假设注册监听的Uri为content:abc,那么只有content:abc的数据改变时也会触发该监听器;

observer——监听器实例。

EG:如下代码片段可用于为指定Uri注册监听器:getContentResolver().registerContentObserver(Uri.parse("content://sms"),true,new SmsOberver(new Handler()));

实例如下:

监听用户发出的短信

总结:ContentProvider的本质就是一个“网站”,其可以把应用程序的数据按照“固定规范”暴露出来,其他应用程序就可通过ContentProvider暴露的接口来操作内部的数据了。

可理解为:ContentProvider是Android系统内不同程序之间进行数据交换的标准接口。

ContentResolver用于操作ContentProvider提供的数据;

ContentObserver用于监听ContentProvider的数据改变;

ContentProvider则是所有ContentProvider组件的基类。

android学习笔记55——ContentProvider_2的更多相关文章

  1. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  2. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  3. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  4. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  5. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  6. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  7. Android学习笔记之Activity详解

    1 理解Activity Activity就是一个包含应用程序界面的窗口,是Android四大组件之一.一个应用程序可以包含零个或多个Activity.一个Activity的生命周期是指从屏幕上显示那 ...

  8. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  9. 【转】Pro Android学习笔记(九八):BroadcastReceiver(2):接收器触发通知

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.sina.com.cn/flowingflying或作者@恺风Wei-傻瓜与非傻瓜 广播接 ...

随机推荐

  1. ThreadLocal工作原理

    原文出处: imzoer 在这篇文章中,总结了一下面试过程中遇到的关于ThreadLocal的内容.总体上说,这样回答,面试算是过得去了.但是,这样的回答,明显仅仅是背会了答案,而没有去研究Threa ...

  2. NetworkComms V3 之自定义对象

    NetworkComms网络通信框架序言 能够发送自定义对象,并且在发送的时候对发送的对象进行加密,压缩是networkComms v3框架的一个重要特性. 具体可以参考源码中 ExampleCons ...

  3. ajaxsearch要点1

    ajaxsearch中必须将form的class定义为pagerForm,才能在foot中submit按钮得到值

  4. 64位 ubuntu android studio gradle 权限不够 缺少文件和权限导致

    安装 32位  库文件 sudo apt-get install lib32z1 给文件夹加权限 chmod 777 -R SDK chmod 777 -R android-studio -R表示所有 ...

  5. 1、android源代码下载及目录分析,和eclipser的跟踪

    1.在eclipse中跟踪源代码:假如对mainactivity.java里面的activity按Ctrl+鼠标左键(前提已经导入android源代码:方法1:在项目点击右键,然后找到properti ...

  6. 3、通过挂在系统光盘搭建本地yum仓库的方法

    1. mkdir xxx #新建文件夹 (新建一个挂载需要的文件夹) .配置本地yum源(挂载光盘) .进入 yum.repos.d .ls (查看当前文件夹全部的文件) 并 mv 修改   除Med ...

  7. JDBC中的ResultSet

    ResultSet:结果集.存放数据库中的数据,可以将它想象成一张数据表,通过Statement对象中的executeQuery()方法获得 import com.mysql.jdbc.Stateme ...

  8. docker 源码分析 二(基于1.8.2版本),docker client与daemon交互

    (2) 那我们通过docker客户端发送一个命令,docker是怎样接收到并处理的呢,我们就举个例子来看一下,比如docker pull 命令: 我们回到 docker/docker.go 中,在上一 ...

  9. 跨服务器之间的session共享

    跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称 ...

  10. python数据结构与算法——归并排序

    归并排序: 原理与C语言实现 参考:白话经典算法系列之五 归并排序的实现 1. 容易对有序数组A,B进行排序. 2. 为了使得A,B组内数据有序:可以将A,B组各自再分成二组. 3. 经过不断分组,当 ...