MediaStore API ڈیوائس کی مشترکہ میڈیا فائلوں: تصاویر، ویڈیوز، آڈیو اور دستاویزات تک رسائی کے لیے Android کا انٹرفیس ہے۔ براہ راست فائل تک رسائی کے برعکس، MediaStore ایک مرکزی میڈیا ڈیٹا بیس اور مواد فراہم کنندہ کے ذریعے کام کرتا ہے۔ Android Developers Documentation (2025) کے مطابق، Android 10 سے شروع ہو کر API پرانے READ_EXTERNAL_STORAGE کی جگہ میڈیا کے ساتھ کام کرنے کا بنیادی طریقہ کار بن گیا۔ ڈویلپرز MediaStore کو گیلریوں، میوزک پلیئرز، کیمروں اور فائل مینیجرز میں استعمال کرتے ہیں۔
اہم نکات
MediaStore API Android پلیٹ فارم پر ایک نظامی مواد فراہم کنندہ ہے جو ڈیوائس کی میڈیا فائلوں کو انڈیکس کرنے، ذخیرہ کرنے اور ان تک رسائی فراہم کرنے کے لیے ڈیزائن کیا گیا ہے۔ یہ API Android SDK کا حصہ ہے اور API Level 1 سے دستیاب ہے۔
MediaStore ایک متحد میڈیا ڈیٹا بیس کے ذریعے کام کرتا ہے جو خود بخود ڈیوائس کو اسکین کرتا ہے اور تمام میڈیا فائلوں کا میٹا ڈیٹا جمع کرتا ہے۔ ڈیٹا بیس نظام کے ذریعے اپ ڈیٹ ہوتا ہے جب فائلیں شامل، ترمیم یا حذف کی جاتی ہیں، لہذا ایپلیکیشنز کو دستی اسکیننگ کے بغیر ہمیشہ تازہ ترین معلومات ملتی ہیں۔
MediaStore کے اہم جدول یہ ہیں: Images (تصاویر)، Video (ویڈیوز)، Audio (آڈیو) اور Files (عام فائلیں)۔ ہر جدول میں میٹا ڈیٹا والے کالم ہوتے ہیں: نام، تخلیق کی تاریخ، سائز، MIME قسم، GPS کوآرڈینیٹ اور دیگر خصوصیات۔
Android 10 سے پہلے، ڈویلپرز تمام ڈیوائس فائلوں تک رسائی کے لیے READ_EXTERNAL_STORAGE استعمال کرتے تھے۔ Android 10 (API 29) نے Scoped Storage متعارف کرایا: ایپلیکیشنز صرف اپنی فائلوں اور MediaStore کے ذریعے ہی رسائی حاصل کر سکتی تھیں۔ Android 11 نے پالیسی مزید سخت کر دی، مشترکہ ڈائریکٹریز کے براہ راست پاتھ کو مکمل طور پر بلاک کر دیا۔
Android 13 (API 33) سے شروع ہو کر، Google نے READ_EXTERNAL_STORAGE کو تفصیلی اجازتوں سے بدل دیا: READ_MEDIA_IMAGES، READ_MEDIA_VIDEO اور READ_MEDIA_AUDIO۔ یہ صارفین کو پورے اسٹوریج کو ظاہر کیے بغیر صرف مخصوص میڈیا اقسام تک رسائی دینے کی اجازت دیتا ہے۔
MediaStore مواد فراہم کنندہ کے فن تعمیر پر بنایا گیا ہے: ہر ایپلیکیشن ContentResolver اور Uri کے ذریعے اس تک رسائی حاصل کرتی ہے۔ نظامی میڈیا اسکینر — MediaScannerConnection — بوٹ، USB کنکشن یا ریبوٹ کے دوران ڈیوائس پر تمام فائلوں کو خود بخود انڈیکس کرتا ہے۔
میڈیا ڈیٹا بیس نظامی ڈیٹا بیس میں محفوظ ہوتا ہے اور ہر میڈیا فائل کا ریکارڈ رکھتا ہے۔ کالم قسم کے مطابق مختلف ہوتے ہیں: تصاویر میں ORIENTATION اور DATE_TAKEN ہوتا ہے، ویڈیوز میں DURATION ہوتا ہے، آڈیو فائلوں میں ARTIST اور ALBUM ہوتا ہے۔ ڈویلپر فلٹر کرنے کے لیے projection اور selection کے ساتھ query کے ذریعے SQL جیسے سوالات چلا سکتے ہیں۔
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_ADDED
)
val cursor = contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
MediaStore.Images.Media.DATE_ADDED + " DESC"
)
cursor?.use {
while (moveToNext()) {
val name = getString(getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))
}
}
ہر میڈیا فائل کی شناخت Content URI سے ہوتی ہے جیسے content://media/external/images/media/1234۔ بیرونی URI مشترکہ اسٹوریج کی طرف اشارہ کرتا ہے، جبکہ داخلی URI نظامی میڈیا فائلوں کی طرف اشارہ کرتا ہے۔ فائل پاتھ کے بجائے URI کا استعمال MediaStore کا اہم فائدہ ہے: ایپلیکیشن کو فائل سسٹم تک رسائی کی ضرورت نہیں ہوتی اور یہ محفوظ مواد فراہم کنندہ کے ذریعے کام کرتا ہے۔
MediaStore چار اہم میڈیا اقسام کو سپورٹ کرتا ہے، ہر ایک کا اپنا جدول اور میٹا ڈیٹا سیٹ ہے۔ ڈویلپر اپنی ایپلیکیشن کے مواد کی قسم کے مطابق مناسب جدول منتخب کرتے ہیں۔
معیاری کالموں کے علاوہ، ہر جدول میں نظامی فیلڈز ہوتے ہیں: _ID، DATA (فرسودہ)، SIZE، MIME_TYPE، DATE_ADDED، DATE_MODIFIED۔ Android 10 سے، DATA فیلڈ کو فرسودہ قرار دیا گیا ہے، اور ڈویلپرز کو URI کے ذریعے InputStream کھول کر کام کرنا چاہیے۔
MediaStore کے لیے واضح اجازتوں کی ضرورت ہے، جو Android ورژن کے مطابق مختلف ہوتی ہیں۔ Android 13 سے پہلے، ایک ہی READ_EXTERNAL_STORAGE اجازت استعمال ہوتی تھی۔ Android 13 (API 33) سے شروع ہو کر، Google نے ہر میڈیا قسم کے لیے تفصیلی اجازتیں متعارف کرائیں۔
| میڈیا کی قسم | اجازت (API 33+) | پرانی (API 29–32) |
|---|---|---|
| تصاویر | READ_MEDIA_IMAGES | READ_EXTERNAL_STORAGE |
| ویڈیو | READ_MEDIA_VIDEO | READ_EXTERNAL_STORAGE |
| آڈیو | READ_MEDIA_AUDIO | READ_EXTERNAL_STORAGE |
| لکھنا | WRITE_EXTERNAL_STORAGE | WRITE_EXTERNAL_STORAGE |
MediaStore میں لکھنے کے لیے Android 9 اور اس سے نیچے WRITE_EXTERNAL_STORAGE کی بھی ضرورت ہے۔ Android 10 سے شروع ہو کر، ایپلیکیشن اضافی اجازتوں کے بغیر MediaStore میں اپنی فائلیں لکھ سکتی ہے — ContentResolver.insert کے ذریعے ریکارڈ داخل کرنے پر نظام خود بخود رسائی فراہم کرتا ہے۔
MediaStore کی اجازتیں معیاری ActivityResultContracts.RequestMultiplePermissions میکانزم کے ذریعے مانگی جاتی ہیں۔ صارف درخواست مسترد کر سکتا ہے، اور ایپلیکیشن کو اس منظر نامے کو صحیح طریقے سے سنبھالنا چاہیے۔ MediaStore تک ہر رسائی سے پہلے ContextCompat.checkSelfPermission کے ذریعے اجازت کی جانچ کرنے کی سفارش کی جاتی ہے۔
MediaStore نہ صرف پڑھنے بلکہ میڈیا فائلیں لکھنے کی بھی اجازت دیتا ہے۔ تصویر یا ویڈیو لکھنے کے لیے، ڈویلپر ContentResolver.insert استعمال کرتا ہے اور واپس آنے والے URI کے لیے OutputStream کھولتا ہے۔ نظام خود بخود فائل کو میڈیا ڈیٹا بیس میں شامل کرتا ہے اور انڈیکس کرتا ہے۔
val values = ContentValues().apply {
put(MediaStore.Images.Media.DISPLAY_NAME, "photo_2025.jpg")
put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
put(MediaStore.Images.Media.RELATIVE_PATH, "Pictures/MyApp")
}
val uri = contentResolver?.insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values
)
uri?.let {
val outputStream = contentResolver?.openOutputStream(it)
outputStream?.use { stream ->
// سٹریم میں بائیٹ لکھیں
}
}
حذف کرنا فائل کے URI کے ساتھ ContentResolver.delete کے ذریعے کیا جاتا ہے۔ نظام رسائی کے حقوق کی جانچ کرتا ہے: اگر فائل موجودہ ایپلیکیشن کی ہے تو حذف کرنا اضافی اجازتوں کے بغیر ہوتا ہے۔ Android 10+ پر دوسری ایپلیکیشنز کی فائلوں کے لیے، نظامی ڈائیلاگ کے ذریعے صارف کی تصدیق درکار ہے۔
MediaStore API File API کے ذریعے براہ راست فائل تک رسائی سے بنیادی طور پر مختلف ہے۔ فائل پاتھ کے بجائے Content URI استعمال ہوتے ہیں، اور فائل آپریشن کے بجائے ContentResolver طریقے استعمال ہوتے ہیں۔ یہ تین اہم فوائد فراہم کرتا ہے: سیکیورٹی، خودکار انڈیکسنگ اور متحد انٹرفیس۔
براہ راست فائل تک رسائی Android 10+ پر مشترکہ ڈائریکٹریز کے لیے محدود ہے۔ MediaStore Pictures، DCIM، Movies، Music اور Download سے میڈیا پڑھنے کا واحد طریقہ ہے۔ ایپلیکیشن کے مخصوص فائلز (app-specific storage) کے لیے، براہ راست رسائی محفوظ ہے — یہ Android/data اور Android/media میں فولڈرز ہیں۔
MediaStore اور براہ راست رسائی کے درمیان انتخاب مواد کی قسم پر منحصر ہے۔ MediaStore مشترکہ میڈیا فائلوں کے لیے لازمی ہے جو دوسری ایپلیکیشنز کے لیے قابل رسائی ہیں۔ براہ راست File API ایپلیکیشن کی داخلی فائلوں اور کیشے کے لیے موزوں ہے۔ Storage Access Framework نظامی چنندہ کے ذریعے صوابدیدی دستاویزات منتخب کرنے کے لیے استعمال ہوتا ہے۔
اکثر پوچھے گئے سوالات
MediaStore API ڈیوائس کی میڈیا فائلوں: تصاویر، ویڈیوز، آڈیو اور دستاویزات تک رسائی کے لیے Android کا نظامی مواد فراہم کنندہ ہے۔ API ContentResolver اور میڈیا ڈیٹا بیس کے ذریعے ایک متحد انٹرفیس فراہم کرتا ہے جو خود بخود تمام فائلوں کو انڈیکس کرتا ہے۔
MediaStore Images (تصاویر)، Video (ویڈیوز)، Audio (آڈیو) اور Files (دستاویزات) کو سپورٹ کرتا ہے۔ ہر قسم کا اپنا جدول اور میٹا ڈیٹا سیٹ ہے: تصاویر میں ORIENTATION، ویڈیوز میں DURATION، آڈیو فائلوں میں ARTIST ہے۔
Android 13+ پر تفصیلی اجازتیں استعمال ہوتی ہیں: تصاویر کے لیے READ_MEDIA_IMAGES، ویڈیو کے لیے READ_MEDIA_VIDEO اور آڈیو کے لیے READ_MEDIA_AUDIO۔ صارف صرف مخصوص میڈیا اقسام تک رسائی دے سکتا ہے۔
لکھنے کے لیے، نام اور MIME قسم کے ساتھ ContentValues بنائیں، URI حاصل کرنے کے لیے ContentResolver.insert کال کریں، پھر ContentResolver.openOutputStream کے ذریعے OutputStream کھولیں۔ نظام خود بخود نئی فائل کو انڈیکس کرتا ہے۔
MediaStore میڈیا ڈیٹا بیس کے ذریعے ڈیوائس کی تمام میڈیا فائلوں تک پروگرامیٹک رسائی فراہم کرتا ہے۔ Storage Access Framework نظامی فائل انتخاب کا ڈائیلاگ کھولتا ہے اور URI واپس کرتا ہے — صارف ایک مخصوص فائل یا فولڈر منتخب کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں