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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें