Android四大组件之ContentProvider

ContentProvider 介绍

用于跨进程共享数据。它提供了一套完整的方案,使得一个应用程序可以访问另一个程序的数据,进行增删改查。是Android进行跨进程共享数据的标准方式。
比如,我们可以开发自己的程序访问系统的联系人列表、通话记录、短信列表等,都是使用了 ContentProvider。

ContentProvider 使用

使用 ContentProvider 获取系统数据:

如果我们仅仅是获取系统的一些数据,直接可以通过调用 Context 的方法 getContentResolver()来获取 ContentResolver 对象。然后再调用 ContentResolver 的增删改查方法来操作数据。

具体示例:Android获取手机短信和通话记录及通讯录

自定义 ContentProvider :
  • 用一个类继承 ContentProvider ,子类重写方法。 此时假设示例场景为给其他程序共享一个数据库。
public class MyContentProvider extends ContentProvider {
    public MyContentProvider() {
    }
    //初始化内容提供者的时候调用,可以在里面进行数据库的创建、升级操作
    //,返回 ture 则代表初始化完成。注意,只有当存在 ContentResolver
    //尝试访问我们程序中的数据时,内容提供者才会被初始化
    @Override
    public boolean onCreate() {
        return false;
    }
    //删除数据,可以使用URI来确定删除哪一张表中的数据,selection 和 selectionArgs 是约束条件。
    @Override
    public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

   /插入数据
    @Override
    public Uri insert(@NonNull Uri uri, ContentValues values) {
        return null;
    }
    
    
    //查询数据
    @Override
    public Cursor query(@NonNull Uri uri, String[] projection, String selection,
                        String[] selectionArgs, String sortOrder) {
        return null;
    }
    //更新数据
    @Override
    public int update(@NonNull Uri uri, ContentValues values, String selection,
                      String[] selectionArgs) {
        return 0;
    }
    //根据传入的内容URI来返回相应的 MIME 类型
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

}

不难发现,基本上都是一些增删改啥方法。

  • AndroidManifest.xml 中注册
<!--authorities 用于对不同应用进行区分的,为了规范,一般都是使用包名进行命名,
其他程序访问我们的数据,也是通过这个路径进行访问-->
<provider
    android:name=".contentprovider.MyContentProvider"
    android:authorities="com.sjc.myapplication.provider "
    android:enabled="true"
    android:exported="true" />
  • 其余详情参考《第一行代码.郭霖著》第7章节。

参考文献:

《第一行代码.郭霖著》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值