关于ContentProvider/ContentResolver的使用---- Android 进程间通讯之二

ContentProvider 顾名思义,内容提供者。至于其内部内容是以什么样的形式存储的,如 数据库sqlite,文件等方式,对于使用者是不关心的,使用者来说只要能获取、更新数据就行。

 

关于ContentProvider/ContentResolver的示例,网上已经有很多,大同小异。这里只介绍本人开发过程中常用到ContentProvider/ContentResolver的地方:

  1. 存储数据, 供其他app使用;
  2. 存储数据,发出数据库更新通知,供本app和其他app使用
  3. 用ContentResolver读取系统已有的存储参数

 

下面是每种方法使用时的注意事项:

一、存取数据,供其他app使用

1,要定义唯一的matchurl, 即AUTHORITY, 这个字符串必须是盒子上其他应用没有用过的,否则安装的时候会失败,提示 Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

2,要在 AndroidManifest.xml 里面添加provider的声明

 

要注意两个enable:

android:enable 为true, app开启的时候系统实例化该provider,不用手动代码实例; android:exported 为true, 则表示其他app可以使用或修改该app共享出来的数据

 

3,如果该provider 提供的数据需要在不启动该app情况下使用, 那么需要在该app内实现收到 android.intent.action.BOOT_COMPLETED 通知的时候就实例化该provider,示例如下:

Receiver里 onRecieve 调用的时候在不启动该app的情况下实例化provider

二、发出数据库更新通知

Provider 数据更新通知非常有用, 可以使得数据需求方及时更新、刷新数据

数据使用方要定义observer 并注册

 

 

resolver.registerContentObserver(CONTENT_URI, true, contentObserver);

 

这样provider方数据发生更新、删除后,使用方能及时获取到通知并刷新本地数据

 

三、用ContentResolver读取系统参数

这个功能很少用到,因为系统存储参数,只有特殊情况下才用到

这个系统参数的provider在设备启动的时候已经由系统启动,具体app包名一般为:com.android.providers.settings

其数据库在盒子上的存储路径如下

通过工具查到数据里的内容,大都是系统设置的参数变量

这个数据库里的内容可以通过 content resolver 读取出来,读取方法也是平台现成的接口,

例如:

Settings.System.getString(context.getContentResolver(), "volume_ring");  

 

关于ContentProvider/ContentResolver的使用,目前只用到以上三种方式,相比AIDL 通讯方法来讲,使用起来更方便。

 

相关demo代码:

Provider app: https://github.com/littlelixie/providertest

 

Resolver app: https://github.com/littlelixie/resolvertest

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值