MediaStore API: এটি কী, ক্ষমতা এবং শেয়ার্ড মিডিয়া ফাইল নিয়ে কাজ

লেখক: IT Sectr প্রকাশিত: 2026-07-10 পড়ার সময়: 7 মিনিট

MediaStore API হলো Android-এর ইন্টারফেস ডিভাইসের শেয়ার্ড মিডিয়া ফাইল: ছবি, ভিডিও, অডিও এবং ডকুমেন্ট অ্যাক্সেস করার জন্য। সরাসরি ফাইল অ্যাক্সেসের বিপরীতে, MediaStore একটি কেন্দ্রীভূত মিডিয়া ডেটাবেস এবং কন্টেন্ট প্রোভাইডারের মাধ্যমে কাজ করে। Android Developers Documentation (2025) অনুসারে, Android 10 থেকে শুরু করে API পুরনো READ_EXTERNAL_STORAGE-এর পরিবর্তে মিডিয়ার সাথে কাজ করার প্রধান প্রক্রিয়া হয়ে উঠেছে। ডেভেলপাররা MediaStore ব্যবহার করেন গ্যালারি, মিউজিক প্লেয়ার, ক্যামেরা এবং ফাইল ম্যানেজারে।

মূল বিষয়

  • MediaStore হলো Android-এর সিস্টেম কন্টেন্ট প্রোভাইডার ডিভাইসের শেয়ার্ড মিডিয়া ফাইল অ্যাক্সেস করার জন্য।
  • মিডিয়া ডেটাবেস কেন্দ্রীয়ভাবে ডিভাইসের সব ছবি, ভিডিও এবং অডিও ইনডেক্স করে।
  • Android 10 MediaStore-কে শেয়ার্ড মিডিয়া ফাইল অ্যাক্সেসের একমাত্র উপায় বানিয়েছে।
  • URI লিংক সরাসরি ফাইল পাথ প্রতিস্থাপন করে, নিরাপদ অ্যাক্সেস নিশ্চিত করে।
  • অনুমতি মিডিয়া টাইপ অনুযায়ী অনুরোধ করা হয়: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO, READ_MEDIA_AUDIO।

MediaStore API কী?

MediaStore API হলো Android প্ল্যাটফর্মের একটি সিস্টেম কন্টেন্ট প্রোভাইডার যা ডিভাইসের মিডিয়া ফাইল ইনডেক্স, সংরক্ষণ এবং অ্যাক্সেস প্রদানের জন্য ডিজাইন করা হয়েছে। APIটি Android SDK-এর অংশ এবং API Level 1 থেকে উপলব্ধ।

MediaStore একটি ইউনিফাইড মিডিয়া ডেটাবেসের মাধ্যমে কাজ করে যা স্বয়ংক্রিয়ভাবে ডিভাইস স্ক্যান করে এবং সব মিডিয়া ফাইলের মেটাডেটা সংগ্রহ করে। ডেটাবেস সিস্টেম দ্বারা আপডেট হয় যখন ফাইল যোগ, পরিবর্তন বা মুছে ফেলা হয়, তাই অ্যাপ্লিকেশনগুলি ম্যানুয়াল স্ক্যানিং ছাড়াই সর্বদা আপ-টু-ডেট তথ্য পায়।

MediaStore-এর প্রধান টেবিলগুলি হলো: Images (ছবি), Video (ভিডিও), Audio (অডিও) এবং Files (সাধারণ ফাইল)। প্রতিটি টেবিলে মেটাডেটা সহ কলাম থাকে: নাম, তৈরি করার তারিখ, আকার, MIME টাইপ, GPS কোঅর্ডিনেট এবং অন্যান্য বৈশিষ্ট্য।

Android সংস্করণে MediaStore-এর বিবর্তন

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 কীভাবে কাজ করে: আর্কিটেকচার এবং মিডিয়া ডেটাবেস

MediaStore কন্টেন্ট প্রোভাইডার আর্কিটেকচারের উপর নির্মিত: প্রতিটি অ্যাপ্লিকেশন ContentResolver এবং Uri-এর মাধ্যমে এটি অ্যাক্সেস করে। সিস্টেম মিডিয়া স্ক্যানার — MediaScannerConnection — বুট, USB সংযোগ বা রিবুটের সময় ডিভাইসের সব ফাইল স্বয়ংক্রিয়ভাবে ইনডেক্স করে।

মিডিয়া ডেটাবেস সিস্টেম ডেটাবেসে সংরক্ষিত থাকে এবং প্রতিটি মিডিয়া ফাইলের জন্য রেকর্ড রাখে। কলাম টাইপ অনুযায়ী ভিন্ন হয়: ছবিতে ORIENTATION এবং DATE_TAKEN থাকে, ভিডিওতে DURATION থাকে, অডিও ফাইলে ARTIST এবং ALBUM থাকে। ডেভেলপাররা ফিল্টার করার জন্য projection এবং selection সহ query-এর মাধ্যমে SQL-সদৃশ কোয়েরি চালাতে পারেন।

kotlin
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 URI দ্বারা চিহ্নিত হয় যেমন content://media/external/images/media/1234। বাহ্যিক URI শেয়ার্ড স্টোরেজ নির্দেশ করে, যখন অভ্যন্তরীণ URI সিস্টেম মিডিয়া ফাইল নির্দেশ করে। ফাইল পাথের পরিবর্তে URI ব্যবহার করা MediaStore-এর মূল সুবিধা: অ্যাপ্লিকেশনের ফাইল সিস্টেম অ্যাক্সেসের প্রয়োজন হয় না এবং এটি নিরাপদ কন্টেন্ট প্রোভাইডারের মাধ্যমে কাজ করে।

MediaStore-এ মিডিয়া ফাইলের ধরন

MediaStore চারটি প্রধান মিডিয়া টাইপ সমর্থন করে, প্রতিটির নিজস্ব টেবিল এবং মেটাডেটা সেট রয়েছে। ডেভেলপাররা তাদের অ্যাপ্লিকেশনের কন্টেন্ট টাইপ অনুযায়ী উপযুক্ত টেবিল নির্বাচন করেন।

  • MediaStore.Images — ফটো, স্ক্রিনশট এবং ছবি। কলাম: BUCKET_DISPLAY_NAME, IS_PRIVATE, LATITUDE, LONGITUDE।
  • MediaStore.Video — ভিডিও রেকর্ডিং এবং সিনেমা। কলাম: DURATION, RESOLUTION, IS_DRM।
  • MediaStore.Audio — মিউজিক ট্র্যাক এবং সাউন্ড ফাইল। কলাম: ARTIST, ALBUM, COMPOSER, TRACK।
  • MediaStore.Files — ডকুমেন্ট এবং অন্যান্য ফাইল। Android 10 থেকে শেয়ার্ড অ্যাক্সেসের জন্য উপলব্ধ।

স্ট্যান্ডার্ড কলাম ছাড়াও, প্রতিটি টেবিলে সিস্টেম ফিল্ড থাকে: _ID, DATA (অপ্রচলিত), SIZE, MIME_TYPE, DATE_ADDED, DATE_MODIFIED। Android 10 থেকে, DATA ফিল্ডটি অপ্রচলিত হিসেবে চিহ্নিত, এবং ডেভেলপারদের URI-এর মাধ্যমে InputStream খুলে কাজ করা উচিত।

MediaStore-এর সাথে কাজ করার অনুমতি

MediaStore-এর জন্য স্পষ্ট অনুমতি প্রয়োজন, যা Android সংস্করণ অনুযায়ী ভিন্ন হয়। Android 13-এর আগে, একক READ_EXTERNAL_STORAGE অনুমতি ব্যবহার করা হত। Android 13 (API 33) থেকে শুরু করে, Google প্রতিটি মিডিয়া টাইপের জন্য বিস্তারিত অনুমতি চালু করেছে।

মিডিয়া টাইপঅনুমতি (API 33+)পুরনো (API 29–32)
ছবিREAD_MEDIA_IMAGESREAD_EXTERNAL_STORAGE
ভিডিওREAD_MEDIA_VIDEOREAD_EXTERNAL_STORAGE
অডিওREAD_MEDIA_AUDIOREAD_EXTERNAL_STORAGE
লেখাWRITE_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

MediaStore-এ লেখার জন্য Android 9 এবং তার নিচে WRITE_EXTERNAL_STORAGE প্রয়োজন। Android 10 থেকে শুরু করে, অ্যাপ্লিকেশন অতিরিক্ত অনুমতি ছাড়াই MediaStore-এ নিজস্ব ফাইল লিখতে পারে — ContentResolver.insert-এর মাধ্যমে রেকর্ড ঢোকালে সিস্টেম স্বয়ংক্রিয়ভাবে অ্যাক্সেস প্রদান করে।

রানটাইমে অনুমতি অনুরোধ

MediaStore অনুমতি স্ট্যান্ডার্ড ActivityResultContracts.RequestMultiplePermissions প্রক্রিয়ার মাধ্যমে অনুরোধ করা হয়। ব্যবহারকারী অনুরোধ অস্বীকার করতে পারে, এবং অ্যাপ্লিকেশনকে এই পরিস্থিতি সঠিকভাবে পরিচালনা করতে হবে। MediaStore-এ প্রতিটি অ্যাক্সেসের আগে ContextCompat.checkSelfPermission-এর মাধ্যমে অনুমতি যাচাই করার পরামর্শ দেওয়া হয়।

কোড উদাহরণ: MediaStore-এর মাধ্যমে পড়া এবং লেখা

MediaStore শুধু পড়া নয়, মিডিয়া ফাইল লেখারও অনুমতি দেয়। একটি ছবি বা ভিডিও লেখার জন্য, ডেভেলপার ContentResolver.insert ব্যবহার করে এবং ফেরত আসা URI-র জন্য OutputStream খোলে। সিস্টেম স্বয়ংক্রিয়ভাবে ফাইলটি মিডিয়া ডেটাবেসে যোগ করে এবং ইনডেক্স করে।

kotlin
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 ->
        // স্ট্রিমে বাইট লিখুন
    }
}

MediaStore-এর মাধ্যমে মিডিয়া ফাইল মুছে ফেলা

মুছে ফেলা ফাইলের URI সহ ContentResolver.delete-এর মাধ্যমে করা হয়। সিস্টেম অ্যাক্সেস অধিকার যাচাই করে: যদি ফাইলটি বর্তমান অ্যাপ্লিকেশনের হয়, তাহলে মুছে ফেলা অতিরিক্ত অনুমতি ছাড়াই ঘটে। Android 10+-এ অন্যান্য অ্যাপ্লিকেশনের ফাইলের জন্য, সিস্টেম ডায়ালগের মাধ্যমে ব্যবহারকারীর নিশ্চিতকরণ প্রয়োজন।

MediaStore বনাম সরাসরি ফাইল অ্যাক্সেস

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 সিস্টেম পিকার-এর মাধ্যমে ইচ্ছামতো ডকুমেন্ট নির্বাচনের জন্য ব্যবহৃত হয়।

সচরাচর জিজ্ঞাসিত প্রশ্ন

Android-এ MediaStore API কী?

MediaStore API হলো Android-এর সিস্টেম কন্টেন্ট প্রোভাইডার ডিভাইসের মিডিয়া ফাইল: ছবি, ভিডিও, অডিও এবং ডকুমেন্ট অ্যাক্সেস করার জন্য। API ContentResolver এবং মিডিয়া ডেটাবেসের মাধ্যমে একটি ইউনিফাইড ইন্টারফেস প্রদান করে যা স্বয়ংক্রিয়ভাবে সব ফাইল ইনডেক্স করে।

MediaStore কোন মিডিয়া টাইপ সমর্থন করে?

MediaStore Images (ছবি), Video (ভিডিও), Audio (অডিও) এবং Files (ডকুমেন্ট) সমর্থন করে। প্রতিটি টাইপের নিজস্ব টেবিল এবং মেটাডেটা সেট রয়েছে: ছবিতে ORIENTATION, ভিডিওতে DURATION, অডিও ফাইলে ARTIST থাকে।

Android 13-এ MediaStore-এর জন্য কী অনুমতি প্রয়োজন?

Android 13+-এ বিস্তারিত অনুমতি ব্যবহার করা হয়: ছবির জন্য READ_MEDIA_IMAGES, ভিডিওর জন্য READ_MEDIA_VIDEO এবং অডিওর জন্য READ_MEDIA_AUDIO। ব্যবহারকারী শুধুমাত্র নির্দিষ্ট মিডিয়া টাইপে অ্যাক্সেস দিতে পারেন।

MediaStore-এর মাধ্যমে কীভাবে ফাইল লিখব?

লেখার জন্য, নাম এবং MIME টাইপ সহ ContentValues তৈরি করুন, URI পেতে ContentResolver.insert কল করুন, তারপর ContentResolver.openOutputStream-এর মাধ্যমে OutputStream খুলুন। সিস্টেম স্বয়ংক্রিয়ভাবে নতুন ফাইল ইনডেক্স করে।

MediaStore Storage Access Framework থেকে কীভাবে আলাদা?

MediaStore মিডিয়া ডেটাবেসের মাধ্যমে ডিভাইসের সব মিডিয়া ফাইলে প্রোগ্রাম্যাটিক অ্যাক্সেস প্রদান করে। Storage Access Framework সিস্টেম ফাইল নির্বাচন ডায়ালগ খোলে এবং URI ফেরত দেয় — ব্যবহারকারী একটি নির্দিষ্ট ফাইল বা ফোল্ডার নির্বাচন করে।

সারসংক্ষেপ

  • MediaStore API হলো Android মিডিয়া ফাইল অ্যাক্সেসের প্রধান প্রক্রিয়া, যা কন্টেন্ট প্রোভাইডার এবং মিডিয়া ডেটাবেসের মাধ্যমে কাজ করে।
  • মিডিয়া ডেটাবেস স্বয়ংক্রিয়ভাবে ছবি, ভিডিও, অডিও এবং ডকুমেন্ট ইনডেক্স করে, ContentResolver-এর মাধ্যমে মেটাডেটা অ্যাক্সেস প্রদান করে।
  • Android 10 MediaStore-কে শেয়ার্ড মিডিয়া ফাইল অ্যাক্সেসের একমাত্র উপায় বানিয়েছে, সরাসরি ফাইল অ্যাক্সেস সীমাবদ্ধ করে।
  • Android 13 একক READ_EXTERNAL_STORAGE-এর পরিবর্তে বিস্তারিত অনুমতি READ_MEDIA_IMAGES, READ_MEDIA_VIDEO এবং READ_MEDIA_AUDIO চালু করেছে।
  • Content URI ফাইল পাথ প্রতিস্থাপন করে, অন্যান্য অ্যাপ্লিকেশনের ফাইলে রুট অনুমতি ছাড়া নিরাপদ অ্যাক্সেস নিশ্চিত করে।
  • MediaStore-এর মাধ্যমে লেখা মিডিয়া ডেটাবেসে স্বয়ংক্রিয় ইনডেক্সিং সহ ContentResolver.insert এবং openOutputStream-এর মাধ্যমে করা হয়।
  • পছন্দ MediaStore এবং SAF-এর মধ্যে কাজের উপর নির্ভর করে: MediaStore ব্যাচ মিডিয়া অপারেশনের জন্য, SAF ব্যবহারকারীর দ্বারা পৃথক ফাইল নির্বাচনের জন্য।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন