实现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. Rotate Image [LeetCode]

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  2. 一块神奇的树莓派电子板竟让我学会了Linux系统

    树莓派(Raspberry Pi)是基于ARM的微型电脑主板,外形只有信用卡大小,因此也被称为新型卡片式电脑,树莓派具有电脑的所有基本功能,可谓麻雀虽小五脏俱全.而其开发组织Raspberry Pi ...

  3. Rhel6-mpich2 hpc集群配置文档

    系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.121 server21.example.com 192.168.12 ...

  4. 【转】ora-00031:session marked for kill处理oracle中杀不掉的锁

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

  5. WPF之MVVM模式讲解

    WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI. 恰当的模式可以让我们轻松达到“高内聚 ...

  6. asp.net生成缩略图

    /// <summary> /// 生成缩略图 /// </summary> /// <param name="orginalImagePat"> ...

  7. js中的Bom对象模型

    Bom可以对浏览器的窗口进行访问和操作.使用Bom,开发者可以移动窗口,改变状态栏中的文本以及执行其他与页面内容不直接相关的动作. window对象: 1.窗口操作 其中moveTo,moveBy是窗 ...

  8. android sdk 更新用的HOSTS

    74.125.113.121 developer.android.com203.208.46.146 www.google.com 203.208.46.146 dl.google.com 203.2 ...

  9. 关于VS2013中Win32程序怎么修改图标

    首先向资源文件上加上你要添加的资源(把你要添加的图标放在你的工程的下面,然后右击资源文件选中添加资源,然后选择导入你要添加的图标),下面你只要打开你项目的.rc文件要用查看代码形式打开,然后只要把系统 ...

  10. C#代码示例_集合

    C#中数组实现为System.Array类得实例,它们只是集合类(Collection Classes)中的一种类型. 索引符(indexer)是一种特殊类型的属性,可以把它添加到一个类中,以提供类似 ...