সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্কটি এমনভাবে ডিজাইন করা হয়েছে যাতে এটি নমনীয় এবং অত্যন্ত সুরক্ষিত কন্টেন্ট প্রোভাইডার ফ্রেমওয়ার্ক দ্বারা পরিচালিত ডিভাইস ডেটার সাথে কাজ করতে পারে। এই কারণে, সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক আশা করে যে ফ্রেমওয়ার্ক ব্যবহার করে এমন অ্যাপ তার স্থানীয় ডেটার জন্য আগে থেকেই কন্টেন্ট প্রোভাইডারকে সংজ্ঞায়িত করেছে। সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্ক আপনার সিঙ্ক অ্যাডাপ্টার চালানোর চেষ্টা করলে এবং আপনার অ্যাপে কন্টেন্ট প্রোভাইডার না থাকলে, আপনার সিঙ্ক অ্যাডাপ্টার ক্র্যাশ করে।
আপনি যদি এমন কোনও নতুন অ্যাপ ডেভেলপ করেন যা সার্ভার থেকে ডিভাইসে ডেটা ট্রান্সফার করে, তাহলে আপনার লোকাল ডেটা কন্টেন্ট প্রোভাইডারে স্টোর করার কথা গুরুত্ব সহকারে বিবেচনা করা উচিত। সিঙ্ক অ্যাডাপ্টারের জন্য গুরুত্বপূর্ণ হওয়ার পাশাপাশি, কন্টেন্ট প্রোভাইডার বিভিন্ন ধরনের নিরাপত্তা সংক্রান্ত সুবিধা প্রদান করে এবং 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 }
জাভা
/* * 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" -
অন্য অ্যাপ কন্টেন্ট প্রোভাইডার অ্যাক্সেস করতে পারবে কিনা তা নির্ধারণ করে। আপনার স্টাব কন্টেন্ট
প্রোভাইডারের জন্য, ভ্যালু
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>
সিঙ্ক অ্যাডাপ্টার ফ্রেমওয়ার্কের জন্য প্রয়োজনীয় ডিপেন্ডেন্সি তৈরি করা হয়ে গেছে, এখন আপনি এমন কম্পোনেন্ট তৈরি করতে পারবেন যা আপনার ডেটা ট্রান্সফার কোডকে এনক্যাপসুলেট করে। এই কম্পোনেন্টকে সিঙ্ক অ্যাডাপ্টার বলা হয়। আপনার অ্যাপে কীভাবে এই কম্পোনেন্ট যোগ করবেন তা পরবর্তী টিউটোরিয়ালে দেখানো হয়েছে।