第十章 使用ContentProvider实现数据共享

目录

1 数据共享标准:ContentProvider

1.1 ContentProvider简介

1.2 URI简介

1.3 使用ContentResolver操作数据

2 开发ContentProvider

2.1 开发ContentProvider的子类

2.2 使用ContentProvider调用方法

3 操作系统的ContentProvider

3.1 使用ContentProvider管理联系人

3.2 使用ContentProvider管理多媒体

4 监听ContentProvider的数据改变


1 数据共享标准:ContentProvider

1.1 ContentProvider简介

ContentProvider 是 Android 中实现跨应用数据共享的一种方式。它可以包含一组公开的 URI,其他应用可以通过这些 URI 来操作 ContentProvider 中的数据。ContentProvider 可以用来读写数据库,访问文件系统,甚至访问网络等。

1.2 URI简介

URI (Uniform Resource Identifier) 是一种用来标识 ContentProvider 中数据的方式。在 ContentProvider 中,每一个表或者视图都有一个对应的 URI。比如,

content://com.example.app.provider/table1

可能对应于你的数据库中的一个表。

1.3 使用ContentResolver操作数据

ContentResolver 是用来操作 ContentProvider 中数据的主要接口。你可以通过 ContentResolver 的 query()、insert()、update()、delete() 方法来进行数据操作。以下是一个查询操作的例子:

Uri uri = Uri.parse("content://com.example.app.provider/table1");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);

2 开发ContentProvider

2.1 开发ContentProvider的子类

要创建一个 ContentProvider,你需要继承 ContentProvider 类,然后重写一些必要的方法,如 onCreate()、query()、insert()、update() 和 delete()。以下是一个简单的例子:

public class MyContentProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        // 初始化你的 ContentProvider
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        // 根据 uri 进行查询操作
        return null;
    }

    // 其他的方法...
}

2.2 使用ContentProvider调用方法

其他应用可以通过 ContentResolver 来操作你的 ContentProvider。以下是一个查询操作的例子:

Uri uri = Uri.parse("content://com.example.app.provider/table1");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);

3 操作系统的ContentProvider

3.1 使用ContentProvider管理联系人

Android 系统提供了一个 ContactsContract ContentProvider,你可以通过它来读写联系人数据。以下是一个查询所有联系人的例子:

Uri uri = ContactsContract.Contacts.CONTENT_URI;
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);

3.2 使用ContentProvider管理多媒体

Android 系统也提供了 MediaStore ContentProvider,你可以通过它来访问设备上的多媒体数据。以下是一个查询所有图片的例子:

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);

4 监听ContentProvider的数据改变

你可以通过使用 ContentObserver 来监听 ContentProvider 的数据改变。以下是一个简单的例子:

Uri uri = Uri.parse("content://com.example.app.provider/table1");
ContentResolver resolver = getContentResolver();
ContentObserver observer = new ContentObserver(null) {
    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        // 当数据改变时,这个方法会被调用
    }
};

resolver.registerContentObserver(uri, true, observer);

当你的 ContentProvider 中的数据发生改变时,所有注册到这个 URI 的 ContentObserver 都会收到通知。

猜你喜欢

转载自blog.csdn.net/m0_52537869/article/details/131236633