DocumentProvider হল একটি বিমূর্ত Android ক্লাস যা Storage Access Framework-এর মাধ্যমে ফাইল অ্যাক্সেস করার জন্য একটি কন্টেন্ট প্রদানকারী বাস্তবায়ন করে। প্রদানকারী AndroidManifest.xml-এ নিবন্ধিত হয় এবং সিস্টেম পিকার-এর মাধ্যমে অন্যান্য অ্যাপ্লিকেশনকে ফাইল সরবরাহ করে। Android Developers (2026) অনুসারে, DocumentsProvider-কে নির্বাচন ডায়ালগে ফাইল কাঠামো প্রদর্শনের জন্য queryRoots, queryDocument এবং queryChildDocuments পদ্ধতি বাস্তবায়ন প্রয়োজন।
মূল বিষয়
DocumentsProvider হল একটি বেস Android ক্লাস যা ContentProvider প্রসারিত করে, যা একটি অ্যাপ্লিকেশনকে সিস্টেম SAF ইন্টারফেসের মাধ্যমে তার ফাইলগুলি অন্যান্য অ্যাপ্লিকেশনকে সরবরাহ করতে দেয়। প্রদানকারী একটি ভার্চুয়াল ফাইল সিস্টেম তৈরি করে যা ব্যবহারকারী ডকুমেন্ট নির্বাচন ডায়ালগে দেখে।
প্রতিটি প্রদানকারী ফাইলগুলিকে রুট (roots) — শীর্ষ-স্তরের প্রবেশ পয়েন্টে সংগঠিত করে। উদাহরণস্বরূপ, Google Drive-এর রুট রয়েছে “আমার ড্রাইভ” এবং “আমার সাথে শেয়ার করা।” একটি রুটের মধ্যে, প্রদানকারী ডকুমেন্টের একটি গাছ ফেরত দেয়, যেখানে প্রতিটি ডকুমেন্ট একটি নির্দিষ্ট MIME প্রকার, আকার এবং তারিখ সহ একটি ফাইল বা ডিরেক্টরি।
DocumentProvider android.provider প্যাকেজের অংশ এবং Android 4.4 (API 19) থেকে উপলব্ধ। প্রদানকারী ক্লাউড পরিষেবা, পাসওয়ার্ড ম্যানেজার, নোট নেওয়ার অ্যাপ এবং যেকোনো প্রোগ্রাম দ্বারা ব্যবহৃত হয় যা ফাইলগুলি নিজস্ব বিন্যাসে সংরক্ষণ করে।
নিজের DocumentProvider তৈরি করা DocumentsProvider ক্লাস প্রসারিত করে এবং চারটি বাধ্যতামূলক পদ্ধতি বাস্তবায়নের মাধ্যমে শুরু হয়। প্রদানকারী ফাইল কাঠামো সংজ্ঞায়িত করে যা ফাইল নির্বাচন করার সময় সিস্টেম SAF পিকারে প্রদর্শিত হয়।
প্রথম পদ্ধতি হল queryRoots, যা Root.COLUMN_ROOT_ID, Root.COLUMN_TITLE, Root.COLUMN_SUMMARY এবং Root.COLUMN_FLAGS কলাম সহ একটি কার্সার ফেরত দেয়। প্রতিটি রুট ফ্ল্যাগ সমর্থন করতে পারে: FLAG_SUPPORTS_CREATE, FLAG_SUPPORTS_SEARCH এবং FLAG_SUPPORTS_IS_CHILD।
দ্বিতীয় বাধ্যতামূলক পদ্ধতি হল queryChildDocuments, যা নির্দিষ্ট URI-এর চাইল্ড ডকুমেন্ট ফেরত দেয়। এই পদ্ধতিটি কল করা হয় যখন ব্যবহারকারী পিকারে একটি ডিরেক্টরি খোলে। প্রতিটি ডকুমেন্টে কলাম থাকে: Document.COLUMN_DOCUMENT_ID, COLUMN_DISPLAY_NAME, COLUMN_MIME_TYPE, COLUMN_SIZE এবং COLUMN_LAST_MODIFIED।
DocumentsProvider-এর জন্য পিকার-এর জন্য ফাইল কাঠামো গঠনকারী চারটি পদ্ধতি বাস্তবায়ন প্রয়োজন। এগুলি ছাড়া, প্রদানকারী কাজ করবে না — সিস্টেম SAF ডায়ালগ ফাইল প্রদর্শন করতে সক্ষম হবে না।
অতিরিক্তভাবে, নতুন ফাইল তৈরি করতে createDocument, মুছতে deleteDocument এবং নাম পরিবর্তন করতে renameDocument বাস্তবায়ন করা যেতে পারে। এই পদ্ধতিগুলির রুটে FLAG_SUPPORTS_CREATE ফ্ল্যাগ প্রয়োজন।
DocumentProvider AndroidManifest.xml-এ অতিরিক্ত ইন্টেন্ট ফিল্টার এবং ফ্ল্যাগ সহ একটি সাধারণ ContentProvider হিসাবে নিবন্ধিত হয়। প্রদানকারীকে অনুমতির মাধ্যমে সরাসরি অ্যাক্সেস থেকে রক্ষা করতে হবে — স্পষ্ট অনুমতি সহ android:exported="true" ব্যবহার করার পরামর্শ দেওয়া হয়।
<provider
android:name=".provider.CustomDocumentProvider"
android:authorities="com.example.app.documents"
android:exported="true"
android:grantUriPermissions="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action
android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
<meta-data
android:name="android.content.documents.roots"
android:resource="@xml/file_paths" />
</provider>
grantUriPermissions ফ্ল্যাগ SAF-কে কলকারী অ্যাপ্লিকেশনকে অস্থায়ীভাবে অ্যাক্সেস অধিকার প্রদান করতে দেয়। authorities অ্যাট্রিবিউটটি অনন্য হতে হবে — সাধারণত .documents প্রত্যয় সহ প্যাকেজ নাম ব্যবহার করা হয়। রুট কনফিগার করার জন্য XML রিসোর্স সহ meta-data নির্দিষ্ট করারও পরামর্শ দেওয়া হয়।
DocumentsProvider বাস্তবায়নের জন্য openDocument পদ্ধতি থেকে ParcelFileDescriptor ফেরত দেওয়া প্রয়োজন। স্থানীয় ফাইলের জন্য ParcelFileDescriptor.open ব্যবহৃত হয়, ক্লাউড ফাইলের জন্য — স্ট্রিমিংয়ের জন্য Pipe সহ ParcelFileDescriptor.open ব্যবহৃত হয়। কোডটি অ্যাক্সেস ত্রুটি এবং অনুপস্থিত ফাইলগুলি পরিচালনা করতে হবে।
class CustomDocumentProvider : DocumentsProvider() {
override fun queryRoots(): Cursor {
val matrix = MatrixCursor(Root.COLUMNS)
matrix.newRow().add(Root.COLUMN_ROOT_ID, "local")
.add(Root.COLUMN_TITLE, "My Files")
.add(Root.COLUMN_SUMMARY, "Local documents")
.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE)
return matrix
}
override fun openDocument(
documentId: String, flags: Int, cursor: CancellationSignal?
): ParcelFileDescriptor {
val file = File(context.filesDir, documentId)
val accessMode = ParcelFileDescriptor.parseMode(flags)
return ParcelFileDescriptor.open(file, accessMode)
}
}
DocumentProvider ভার্চুয়াল ফাইল ফেরত দিতে পারে — এমন ডকুমেন্ট যা ডিস্কে পৃথক ফাইল হিসাবে বিদ্যমান নয়। উদাহরণস্বরূপ, একটি ডেটাবেস নোট একটি ভার্চুয়াল PDF হিসাবে উপস্থাপন করা যেতে পারে। এর জন্য FLAG_VIRTUAL_DOCUMENT ফ্ল্যাগ সহ MIME প্রকার ব্যবহার করা হয় এবং openDocument পাঠানোর আগে ডেটা প্রয়োজনীয় বিন্যাসে রূপান্তর করে।
iOS-এ একটি অনুরূপ প্রক্রিয়া রয়েছে — UIDocumentPickerViewController, যা ফাইল নির্বাচনের জন্য একটি ইউনিফাইড ইন্টারফেসও সরবরাহ করে। তবে, iOS-এ ডকুমেন্ট প্রদানকারী UIDocumentPickerDelegate এবং Document Provider প্রকারের অ্যাপ এক্সটেনশনের মাধ্যমে বাস্তবায়িত হয়।
Android DocumentsProvider-এর বিপরীতে, iOS UIDocumentPickerViewController-এর স্থানীয় ফাইলের জন্য কাস্টম প্রদানকারী তৈরি করার প্রয়োজন নেই — সিস্টেম পিকার ডিফল্টরূপে iCloud Drive এবং স্থানীয় স্টোরেজ সমর্থন করে। তৃতীয়-পক্ষের ক্লাউড পরিষেবাগুলি Info.plist কী NSExtensionFileProviderDocumentInterface সহ Document Provider এক্সটেনশন এর মাধ্যমে নিবন্ধিত হয়।
প্রধান পার্থক্য: Android-এ, DocumentProvider SAF Intent-এর মাধ্যমে সক্রিয়ভাবে কল করা হয় এবং তাকে নিজেই নেভিগেশন বাস্তবায়ন করতে হয়। iOS-এ, UIDocumentPickerViewController একটি অন্তর্নির্মিত সিস্টেম ফাইল ব্রাউজার ব্যবহার করে এবং এক্সটেনশন প্রদানকারী শুধুমাত্র অনুরোধের ভিত্তিতে বিষয়বস্তু সরবরাহ করার জন্য দায়ী।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
DocumentsProvider কাস্টম ডকুমেন্ট প্রদানকারী তৈরির জন্য একটি বিমূর্ত Android ক্লাস। এটি একটি অ্যাপ্লিকেশনকে সিস্টেম Storage Access Framework ডায়ালগের মাধ্যমে অন্যান্য অ্যাপ্লিকেশনকে তার ফাইল উপস্থাপন করতে দেয়।
চারটি পদ্ধতি বাধ্যতামূলক: queryRoots (স্টোরেজ রুট), queryDocument (একটি ডকুমেন্ট), queryChildDocuments (ফোল্ডারের বিষয়বস্তু) এবং openDocument (ফাইল খোলা)। এগুলি ছাড়া, প্রদানকারী কাজ করবে না।
প্রদানকারীকে <provider> হিসাবে ক্লাস নাম, অনন্য authorities, ক্রিয়া android.content.action.DOCUMENTS_PROVIDER সহ ইন্টেন্ট ফিল্টার এবং grantUriPermissions="true" দিয়ে নিবন্ধিত করা হয়।
FileProvider আপনার অ্যাপ্লিকেশনের নির্দিষ্ট ফাইলগুলির জন্য content URI তৈরি করে। DocumentsProvider SAF পিকারে দৃশ্যমান একটি সম্পূর্ণ ফাইল সিস্টেম তৈরি করে, নেভিগেশন এবং অনুসন্ধানের জন্য সমর্থন সহ।
COLUMN_FLAGS কলামে FLAG_VIRTUAL_DOCUMENT ফ্ল্যাগ এবং “vnd.android.document/” উপসর্গ সহ MIME প্রকার ব্যবহার করুন। openDocument-এ, Pipe সহ ParcelFileDescriptor ব্যবহার করে ডেটা অনুরোধিত বিন্যাসে রূপান্তর করুন।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন