چارچوب وفقدهنده همگامسازی برای کار با دادههای دستگاه طراحی شده است که توسط چارچوب ارائهدهنده محتوای انعطافپذیر و بسیار امن مدیریت میشود. به همین دلیل، چارچوب وفقدهنده همگامسازی انتظار دارد برنامهای که از این چارچوب استفاده میکند ازقبل ارائهدهنده محتوایی برای دادههای محلی خود تعریف کرده باشد. اگر چارچوب وفقدهنده همگامسازی سعی کند وفقدهنده همگامسازی شما را اجرا کند و برنامهتان ارائهدهنده محتوا نداشته باشد، وفقدهنده همگامسازی شما ازکار میافتد.
اگر درحال توسعه برنامه جدیدی هستید که دادهها را از سرور به دستگاه منتقل میکند، باید ذخیره کردن دادههای محلی را در ارائهدهنده محتوا بهطور جدی درنظر بگیرید. علاوهبر اهمیت آنها برای وفقدهندههای همگامسازی، ارائهدهندگان محتوا مزایای امنیتی مختلفی را ارائه میدهند و بهطور خاص برای مدیریت ذخیرهسازی دادهها در سیستمهای Android طراحی شدهاند. برای کسب اطلاعات بیشتر درباره ایجاد ارائهدهنده محتوا، به ایجاد ارائهدهنده محتوا مراجعه کنید.
بااینحال، اگر درحالحاضر دادههای محلی را به شکل دیگری ذخیره میکنید، همچنان میتوانید از وفقدهنده همگامسازی برای مدیریت انتقال داده استفاده کنید. برای برآورده کردن الزامات چارچوب وفقدهنده همگامسازی برای
ارائهدهنده محتوا، ارائهدهنده محتوای ساختگی به برنامهتان اضافه کنید. ارائهدهنده ساختگی کلاس ارائهدهنده محتوا را پیادهسازی میکند، اما همه روشهای الزامی آن null یا 0 را برمیگرداند. اگر
ارائهدهنده خرد اضافه کنید، میتوانید از وفقدهنده همگامسازی برای انتقال داده از هر سازوکار ذخیرهسازیای
که انتخاب میکنید استفاده کنید.
اگر ازقبل ارائهدهنده محتوا در برنامهتان دارید، به ارائهدهنده محتوای تهیسازه نیاز ندارید. در این صورت، میتوانید از این درس رد شوید و به درس ایجاد وفقدهنده همگامسازی بروید. اگر هنوز ارائهدهنده محتوا ندارید، این درس به شما نشان میدهد که چگونه یک ارائهدهنده محتوای ته چک اضافه کنید که به شما امکان میدهد وفقدهنده همگامسازی خود را به چارچوب متصل کنید.
افزودن ارائهدهنده محتوای ساختگی
برای ایجاد ارائهدهنده محتوای ساختگی برای برنامهتان، کلاس
ContentProvider را گسترش دهید و روشهای موردنیاز آن را بهصورت ساختگی ایجاد کنید. قطعه کد زیر نحوه ایجاد ارائهدهنده ساختگی را نشان میدهد:
کاتلین
/* * 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 }
جاوا
/* * 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" -
تعیین میکند که آیا برنامههای دیگر میتوانند به ارائهدهنده محتوا دسترسی داشته باشند یا نه. برای ارائهدهنده محتوای stub، مقدار را روی
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>
اکنون که وابستگیهای موردنیاز چارچوب وفقدهنده همگامسازی را ایجاد کردهاید، میتوانید مؤلفهای را ایجاد کنید که کد انتقال داده شما را کپسولهسازی میکند. این مؤلفه وفقدهنده همگامسازی نامیده میشود. درس بعدی به شما نشان میدهد که چگونه این مؤلفه را به برنامهتان اضافه کنید.