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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন