Tạo trình cung cấp nội dung mã giả lập

Khung bộ điều hợp đồng bộ hoá được thiết kế để làm việc với dữ liệu thiết bị do khung nhà cung cấp nội dung có độ bảo mật cao. Vì lý do này, khung bộ điều hợp đồng bộ hoá dự kiến một ứng dụng sử dụng khung này đã xác định một trình cung cấp nội dung cho dữ liệu cục bộ của ứng dụng đó. Nếu khung bộ điều hợp đồng bộ hoá cố gắng chạy bộ điều hợp đồng bộ hoá và ứng dụng của bạn không có nhà cung cấp nội dung, bộ điều hợp đồng bộ hoá của bạn gặp sự cố.

Nếu đang phát triển một ứng dụng mới có chức năng chuyển dữ liệu từ máy chủ đến thiết bị, bạn nên hãy cân nhắc kỹ lưỡng việc lưu trữ dữ liệu cục bộ trong trình cung cấp nội dung. Ngoài tầm quan trọng của chúng đối với bộ điều hợp đồng bộ hoá, nhà cung cấp nội dung mang lại nhiều lợi ích về bảo mật và đặc biệt được thiết kế để xử lý lưu trữ dữ liệu trên hệ thống Android. Để tìm hiểu thêm về việc tạo nội dung hãy xem phần Tạo trình cung cấp nội dung.

Tuy nhiên, nếu đã lưu trữ dữ liệu cục bộ ở dạng khác, bạn vẫn có thể sử dụng tính năng đồng bộ hoá để xử lý việc chuyển dữ liệu. Để đáp ứng yêu cầu về khung bộ điều hợp đồng bộ hoá cho một nhà cung cấp nội dung, hãy thêm nhà cung cấp nội dung giả lập vào ứng dụng của bạn. Một trình cung cấp mã giả lập sẽ triển khai nhưng tất cả phương thức bắt buộc đều trả về null hoặc 0. Nếu bạn thêm nhà cung cấp mã giả lập, sau đó bạn có thể sử dụng bộ điều hợp đồng bộ hoá để chuyển dữ liệu từ bất kỳ bộ nhớ nào cơ chế bạn chọn.

Nếu đã có nhà cung cấp nội dung trong ứng dụng, bạn không cần nhà cung cấp nội dung mã giả lập. Trong trường hợp đó, bạn có thể bỏ qua bài học này và chuyển sang bài học tiếp theo. Tạo Bộ điều hợp đồng bộ hoá. Nếu bạn chưa có nhà cung cấp nội dung này, bài học này sẽ hướng dẫn bạn cách thêm trình cung cấp nội dung giả lập cho phép bạn cắm bộ điều hợp đồng bộ hoá vào khung.

Thêm trình cung cấp nội dung mã giả lập

Để tạo trình cung cấp nội dung mã giả lập cho ứng dụng của bạn, hãy mở rộng lớp này ContentProvider và tìm ra các phương thức cần thiết. Nội dung sau đây đoạn mã cho bạn biết cách tạo trình cung cấp mã giả lập:

Kotlin

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
class StubProvider : ContentProvider() {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    override fun onCreate(): Boolean  = true

    /*
     * Return no type for MIME type
     */
    override fun getType(uri: Uri): String?  = null

    /*
     * query() always returns no results
     *
     */
    override fun query(
            uri: Uri,
            projection: Array<String>,
            selection: String,
            selectionArgs: Array<String>,
            sortOrder: String
    ): Cursor?  = null

    /*
     * insert() always returns null (no URI)
     */
    override fun insert(uri: Uri, values: ContentValues): Uri? = null

    /*
     * delete() always returns "no rows affected" (0)
     */
    override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int = 0

    /*
     * update() always returns "no rows affected" (0)
     */
    override fun update(
            uri: Uri,
            values: ContentValues,
            selection: String,
            selectionArgs: Array<String>
    ): Int = 0
}

Java

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
public class StubProvider extends ContentProvider {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    @Override
    public boolean onCreate() {
        return true;
    }
    /*
     * Return no type for MIME type
     */
    @Override
    public String getType(Uri uri) {
        return null;
    }
    /*
     * query() always returns no results
     *
     */
    @Override
    public Cursor query(
            Uri uri,
            String[] projection,
            String selection,
            String[] selectionArgs,
            String sortOrder) {
        return null;
    }
    /*
     * insert() always returns null (no URI)
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    /*
     * delete() always returns "no rows affected" (0)
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    /*
     * update() always returns "no rows affected" (0)
     */
    public int update(
            Uri uri,
            ContentValues values,
            String selection,
            String[] selectionArgs) {
        return 0;
    }
}

Khai báo trình cung cấp trong tệp kê khai

Khung bộ điều hợp đồng bộ hoá xác minh rằng ứng dụng của bạn có nhà cung cấp nội dung bằng cách kiểm tra xem ứng dụng đã khai báo một trình cung cấp trong tệp kê khai ứng dụng. Để khai báo trình cung cấp mã giả lập trong tệp kê khai, hãy thêm phần tử <provider> có các thuộc tính sau:

android:name="com.example.android.datasync.provider.StubProvider"
Chỉ định tên đủ điều kiện của lớp triển khai trình cung cấp nội dung mã giả lập.
android:authorities="com.example.android.datasync.provider"
Đơn vị quản lý URI xác định nhà cung cấp nội dung mã giả lập. Biến giá trị này thành giá trị tên gói có chuỗi ".provider" được thêm vào từ khoá. Mặc dù bạn đang khai báo mã giả lập vào hệ thống, không có gì cố gắng truy cập vào chính trình cung cấp đó.
android:exported="false"
Xác định xem các ứng dụng khác có thể truy cập vào trình cung cấp nội dung hay không. Đối với nội dung giả lập của bạn nhà cung cấp dịch vụ, hãy đặt giá trị thành false vì không cần cho phép ứng dụng khác xem cho nhà cung cấp. Giá trị này không ảnh hưởng đến sự tương tác giữa khung bộ điều hợp đồng bộ hoá và trình cung cấp nội dung.
android:syncable="true"
Đặt cờ cho biết trình cung cấp có thể đồng bộ hoá. Nếu bạn đặt cờ này thành true, bạn không phải gọi setIsSyncable() trong mã. Cờ này cho phép khung bộ điều hợp đồng bộ hoá tạo dữ liệu quá trình chuyển giao với nhà cung cấp nội dung nhưng chỉ xảy ra việc chuyển giao nếu bạn thực hiện việc chuyển này một cách rõ ràng.

Đoạn mã sau đây hướng dẫn bạn cách thêm Phần tử <provider> vào tệp kê khai ứng dụng:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.network.sync.BasicSyncAdapter"
    android:versionCode="1"
    android:versionName="1.0" >
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    ...
    <provider
        android:name="com.example.android.datasync.provider.StubProvider"
        android:authorities="com.example.android.datasync.provider"
        android:exported="false"
        android:syncable="true"/>
    ...
    </application>
</manifest>

Giờ đây, khi đã tạo các phần phụ thuộc theo yêu cầu của khung bộ điều hợp đồng bộ hoá, bạn có thể tạo thành phần đóng gói mã chuyển dữ liệu. Thành phần này được gọi là bộ điều hợp đồng bộ hoá. Bài học tiếp theo sẽ hướng dẫn bạn cách thêm thành phần này vào ứng dụng.