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 وسائل کے ساتھ میٹا ڈیٹا بتانے کی بھی سفارش کی جاتی ہے۔
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 آپ کی ایپلیکیشن کی مخصوص فائلوں کے لیے مواد URI بناتا ہے۔ DocumentsProvider SAF چنندہ میں نظر آنے والا ایک مکمل فائل سسٹم بناتا ہے، جس میں نیویگیشن اور تلاش کی حمایت شامل ہے۔
COLUMN_FLAGS کالم میں FLAG_VIRTUAL_DOCUMENT جھنڈا اور «vnd.android.document/» سابقے کے ساتھ MIME قسم استعمال کریں۔ openDocument میں، Pipe کے ساتھ ParcelFileDescriptor استعمال کرکے ڈیٹا کو مطلوبہ شکل میں تبدیل کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں