Android --- 共享数据 -- ContentResolver

简介:

ContentProvider 是内容提供者
ContentResolver 内容解析者

ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查。
关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据。
那么,这里为何要使用ContentProvider 对外共享数据呢?是这样的,如果采用文件操作模式对外共享数据,数据的访问方式会因数据存储的方式而不同,导致数据的访问方式无法统一,如:采用xml文件对外共享数据,需要进行xml解析才能读取数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读取数据。 使用ContentProvider对外共享数据的好处是统一了数据的访问方式。
ContentProvider的原理是按照一定规则暴露自己的接口给其它应用来访问自己应用的数据(其实就是自定义增删改查接口并暴露出去,让别的应用访问自己的数据)。
ContentResolver就是按照一定规则访问内容提供者的数据(其实就是调用内容提供者自定义的接口来操作它的数据)。

系统中提供的 ContentProvider 都需要使用 ContentResolver 来操作,操作方式,
在任何一个 Context 环境下均可以使用 getContentResolver() 拿到ContentResolver 对象

查询:

private void readSms(){
    // 短信的 Uri
    Uri uri = Uri.parse("content://sms");
    // 查询的字段
    String[] columns = {
  "_id","address","type","body"};
    // 查询
    Cursor c = getContentResolver().query(uri,columns,null,null,null);
    StringBuilder sb = new StringBuilder();
    while(c.moveToNext()){
        int id = c.getInt(0);
        String address = c.getString(1);
        int type = c.getInt(2);
        String body = c.getString(3);
        sb.append(id).append("\t").append(address).append("\t")
            .append(type).append("\t").append(body).append("\n");
    }
    c.close();
    tvResult.setText(sb.toString());
}

注意: 6.0 以上针对部分数据(联系人,短信)需要动态申请权限

动态申请权限

1 、检测权限是否被授权

// 检测是否授权
int permissionState = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);
    if(permissionState == PackageManager.PERMISSION_GRANTED){
    //已授权
}

2 、如果未授权则需要申请权限

requestPermissions(new String[]{Manifest.permission.READ_SMS},REQUST_READ_SMS);

3 、处理申请结果,需要在 Activity 中重写 onRequestPermissionsResult 方法

以申请读短信为例

检测和申请
// 检测当前系统是否是 6.0 以上
if(Build.VERSION.SDK_INT >= 23){
    // 检测是否授权
    int permissionState = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS);
    if(permissionState == PackageManager.PERMISSION_GRANTED){
        // 表示已经授权
        readSms();
    } else {
        // 申请权限
        requestP
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值