Membuat penyedia konten stub

Framework adaptor sinkronisasi didesain untuk bekerja dengan data perangkat yang dikelola oleh penyedia konten yang sangat aman. Karena alasan ini, framework adaptor sinkronisasi mengharapkan bahwa aplikasi yang menggunakan kerangka kerja sudah mendefinisikan penyedia konten untuk data lokalnya. Jika framework adaptor sinkronisasi mencoba menjalankan adaptor sinkronisasi, dan aplikasi Anda tidak memiliki penyedia konten, adaptor sinkronisasi Anda akan macet.

Jika Anda mengembangkan aplikasi baru yang mentransfer data dari server ke perangkat, Anda harus sebaiknya simpan data lokal dalam penyedia konten. Selain peran penting mereka untuk adaptor sinkronisasi, penyedia konten menawarkan berbagai manfaat keamanan dan secara khusus dirancang untuk menangani penyimpanan data pada sistem Android. Untuk mempelajari lebih lanjut cara membuat konten penyedia konten, lihat Membuat Penyedia Konten.

Namun, jika Anda sudah menyimpan data lokal dalam bentuk lain, Anda masih dapat menggunakan untuk menangani transfer data. Untuk memenuhi persyaratan framework adaptor sinkronisasi untuk penyedia konten, tambahkan penyedia konten stub ke aplikasi Anda. Penyedia stub menerapkan class penyedia konten, tetapi semua metode yang diperlukan akan menampilkan null atau 0. Jika Anda menambahkan penyedia stub, Anda kemudian dapat menggunakan adaptor sinkronisasi untuk mentransfer data dari penyimpanan mana pun mekanisme yang Anda pilih.

Jika sudah memiliki penyedia konten di aplikasi, Anda tidak memerlukan penyedia konten stub. Jika demikian, Anda dapat melewati pelajaran ini dan melanjutkan ke pelajaran Membuat Adaptor Sinkronisasi. Jika Anda belum memiliki penyedia konten, pelajaran ini menunjukkan cara menambahkan penyedia konten stub yang memungkinkan Anda menyambungkan adaptor sinkronisasi Anda ke dalam kerangka kerja.

Menambahkan penyedia konten stub

Untuk membuat penyedia konten stub bagi aplikasi Anda, perluas class ContentProvider dan menghentikan metode yang diperlukan. Hal berikut cuplikan ini menunjukkan cara membuat penyedia stub:

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;
    }
}

Mendeklarasikan penyedia di manifes

Framework adaptor sinkronisasi memastikan bahwa aplikasi Anda memiliki penyedia konten dengan memeriksa bahwa aplikasi telah mendeklarasikan penyedia dalam manifes aplikasinya. Untuk mendeklarasikan penyedia stub dalam tambahkan elemen <provider> dengan atribut berikut:

android:name="com.example.android.datasync.provider.StubProvider"
Menentukan nama class yang sepenuhnya memenuhi syarat yang menerapkan penyedia konten stub.
android:authorities="com.example.android.datasync.provider"
Otoritas URI yang mengidentifikasi penyedia konten stub. Jadikan nilai ini milik aplikasi Anda nama paket dengan string ".provider" ditambahkan ke dalamnya. Meskipun Anda mendeklarasikan penyedia stub ke sistem, tidak ada yang mencoba mengakses penyedia itu sendiri.
android:exported="false"
Menentukan apakah aplikasi lain dapat mengakses penyedia konten. Untuk konten stub Anda penyedia, setel nilai ke false, karena tidak perlu mengizinkan aplikasi lain untuk melihat penyedia. Nilai ini tidak memengaruhi interaksi antara framework adaptor sinkronisasi dan penyedia konten.
android:syncable="true"
Menetapkan tanda yang menunjukkan bahwa penyedia dapat disinkronkan. Jika Anda mengatur penanda ini ke true, Anda tidak perlu memanggil setIsSyncable() dalam kode Anda. Flag tersebut memungkinkan framework adaptor sinkronisasi membuat data transfer dengan penyedia konten, namun transfer hanya terjadi jika Anda melakukannya secara eksplisit.

Cuplikan berikut menunjukkan cara menambahkan atribut <provider> ke manifes aplikasi:

<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>

Setelah membuat dependensi yang diperlukan oleh framework adaptor sinkronisasi, Anda bisa buat komponen yang mengenkapsulasi kode transfer data Anda. Komponen ini disebut {i>synchronize<i}. Tutorial berikutnya akan menjelaskan cara menambahkan komponen ini ke aplikasi Anda.