إنشاء موفّر محتوى بديل

تم تصميم إطار عمل محول المزامنة للعمل مع بيانات الجهاز التي تتم إدارتها بواسطة بيئة إطار عمل موفِّر محتوى آمن للغاية لهذا السبب، يتوقع إطار عمل محوّل المزامنة أنّ أحد التطبيقات التي تستخدم إطار العمل قد سبق له تحديد موفّر محتوى لبياناته المحلية. إذا حاول إطار عمل محوّل المزامنة تشغيل محوّل المزامنة، ولم يكن تطبيقك يحتوي على للمحتوى، تعطل محوّل المزامنة.

إذا كنت تطوّر تطبيقًا جديدًا ينقل البيانات من خادم إلى الجهاز، عليك إجراء ما يلي: تخزين البيانات المحلية في موفر المحتوى بشكل كبير. إلى جانب أهميتها بمهايئات المزامنة، ويوفر موفرو المحتوى مجموعة متنوعة من مزايا الأمان ويركزون للتعامل مع تخزين البيانات على أنظمة Android. للتعرف على المزيد من المعلومات حول إنشاء محتوى إنشاء مقدم محتوى.

ومع ذلك، إذا كنت تخزِّن البيانات المحلية في نموذج آخر، سيظل بإمكانك استخدام المزامنة. للتعامل مع نقل البيانات. لتلبية متطلبات إطار عمل محول المزامنة موفّر محتوى، يُرجى إضافة موفّر محتوى بديل إلى تطبيقك. ينفذ موفر التمثيل المنطقي فئة موفِّر المحتوى، ولكن كل الطرق المطلوبة تعرض null أو 0. إذا كنت إضافة موفِّر بديل، يمكنك بعد ذلك استخدام محوّل مزامنة لنقل البيانات من أي مساحة تخزين الآلية التي تختارها.

إذا كان تطبيقك يتضمّن موفّر محتوى، لن تحتاج إلى الاستعانة به. في هذه الحالة، يمكنك تخطّي هذا الدرس والانتقال إلى الدرس. إنشاء محوّل مزامنة: إذا لم يكن لديك حتى الآن يقدّم هذا الدرس شرحًا حول كيفية إضافة موفّر محتوى بديل يسمح لك توصيل محول المزامنة بإطار العمل.

إضافة موفّر محتوى بديل

لإنشاء موفّر محتوى بديل لتطبيقك، عليك تمديد الصف. ContentProvider وتخلّص من الطرق المطلوبة. ما يلي: يعرض لك المقتطف كيفية إنشاء موفِّر التسريع:

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

يُرجى تعريف الموفِّر في البيان

يتحقّق إطار عمل محوّل المزامنة من توفُّر موفّر محتوى لتطبيقك من خلال التأكّد من أنّ أعلن التطبيق عن موفِّر في بيان التطبيق الخاص به. للإعلان عن موفّر الخدمة الموجزة في ملف البيان، يمكنك إضافة عنصر <provider> مع السمات التالية:

android:name="com.example.android.datasync.provider.StubProvider"
تُحدِّد الاسم المؤهَّل بالكامل للفئة التي تنفِّذ موفّر محتوى التمثيل الموجز.
android:authorities="com.example.android.datasync.provider"
مرجع معرّف الموارد المنتظم (URI) الذي يحدّد موفّر محتوى التنويه الموجز ننصحك بأن تكون هذه القيمة مفيدة لتطبيقك اسم الحزمة مع السلسلة " .provider" ملحق بها. وعلى الرغم من إعلانك موفر الخدمة الأساسي إلى النظام، فلا شيء يحاول الوصول إلى موفر الخدمة نفسه.
android:exported="false"
يحدِّد هذا الإعداد ما إذا كان بإمكان التطبيقات الأخرى الوصول إلى موفّر المحتوى. للمحتوى الموجز الخاص بك Google، عليك ضبط القيمة على false، لعدم الحاجة إلى السماح للتطبيقات الأخرى بالاطّلاع على المزود. لا تؤثر هذه القيمة في التفاعل بين إطار عمل محوّل المزامنة. وموفّر المحتوى
android:syncable="true"
لضبط علامة تشير إلى أنّ موفّر الخدمة قابل للمزامنة. إذا عيّنت هذه العلامة على true، ليس عليك الاتصال بـ setIsSyncable() في رمزك. تتيح العلامة لإطار عمل مهايئات المزامنة إنشاء البيانات عمليات النقل مع موفّر المحتوى، ولكن لا تحدث عمليات النقل إلا إذا قمت بها بشكل صريح.

يوضح لك المقتطف التالي كيفية إضافة العنصر <provider> إلى بيان التطبيق:

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

والآن بعد أن أنشأت التبعيات التي يتطلبها إطار عمل محول المزامنة، يمكنك وإنشاء المكون الذي يغلف رمز نقل البيانات. يسمى هذا المكون محوّل المزامنة. يوضح الدرس التالي كيفية إضافة هذا المكون إلى تطبيقك.