实现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组件的基类。

转载于:https://www.cnblogs.com/YYkun/p/5995653.html

android学习笔记55——ContentProvider_2相关推荐

  1. Android学习笔记:Android基础知识点(不断更新中)

    1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...

  2. Android学习笔记21:ImageView获取网络图片

    Android平台有3种网络接口可以使用,它们分别是:java.net.*(标准java接口).org.apache(Apache接口)和android.net.*(Android网络接口).本文将使 ...

  3. Android学习笔记(七):多个Activity和Intent

    根据www.mars-droid.com:Andriod开发视频教学,先跳过书本<Beginning Android 2>的几个章,我是这两个资源一起看,需要进行一下同步.先初步了解一下应 ...

  4. Android学习笔记26:图片切换控件ImageSwitcher的使用

    在Windows操作系统中,要查看多张图片,可以通过使用"Windows照片查看器"在"上一张"和"下一张"之间切换,进行多张图片的浏览. ...

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

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

  6. Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...

  7. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

  8. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  9. Android学习笔记:TabHost 和 FragmentTabHost(转)

    Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...

最新文章

  1. 使用深度学习opencv 进行人脸年龄的实时检测
  2. Xamarin Android项目真机测试闪退
  3. python真的很厉害吗-学会Python后都能做什么?网友们的回答简直不要太厉害
  4. 小程序简单封装 request 请求
  5. vb破解万能断点816c24
  6. 基于Linux的USB 主/从设备之间通讯的三种方式
  7. 另一种无法enable ABAP source code tool的原因
  8. 缓冲文件系统(fopen/fread/fwrite)和非缓冲文件系统(open/read/write)
  9. ThinkPHP6内核学生成绩管理系统源码 内附安装说明
  10. 关于Element UI中select组件中遇到的问题
  11. python爬取新闻存入数据库_Python爬取数据并写入MySQL数据库的实例
  12. 仿函数适配器(mem_fun/mem_fun_ref)
  13. UE4之读取图片并纹理贴图显示
  14. 打开本地html加载网页慢,浏览器打开网页很慢怎么回事_浏览器打开网页很慢如何解决...
  15. Linux数据库mariadb管理
  16. 机器学习、深度学习、神经网络还傻傻分不清吗?
  17. 关于CSS选择器的权重计算
  18. java画篮球_PS教程!手把手教你绘制炫酷的科比篮球海报
  19. 引力波是怎样产生的?
  20. library netcdf 路径_c#读取netcdf文件小结

热门文章

  1. 百度李彦宏携三人赴港二次上市,网站推广之下百度的未来愈加可期
  2. 网站优化只需五步技巧分享推广无界限
  3. 网站站内优化新方案,SEO运营人员值得一看
  4. html select滚动轴,javascript - html select scroll bar - Stack Overflow
  5. 变频电机转矩频率特性曲线_伟创变频器
  6. 小程序分享到朋友圈功能_微信小程序开放分享到朋友圈功能
  7. 前置机上如何地址转换_canvas原生层级较高,遮盖自定义tabbar,转换为图片解决...
  8. 关键词 onStart()和onResume()存在的原因(测验篇)两者的区别
  9. 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。...
  10. 454. 4Sum II ——查找本质:hash最快,二分次之