欢迎莅临 SUN WU GANG 的园子!!!

世上无难事,只畏有心人。有心之人,即立志之坚午也,志坚则不畏事之不成。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  470 随笔 :: 0 文章 :: 22 评论 :: 30万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

 

posted on   sunwugang  阅读(211)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示