MediaProvider मॉड्यूल, इंडेक्स किए गए मेटाडेटा (एसडी कार्ड और यूएसबी डिवाइसों से मिले ऑडियो, वीडियो, और इमेज) को ऑप्टिमाइज़ करता है. साथ ही, MediaStore के सार्वजनिक एपीआई की मदद से, उस डेटा को ऐप्लिकेशन के लिए उपलब्ध कराता है. उपयोगकर्ता की निजता बनाए रखने के लिए, MediaProvider मॉड्यूल दायरे वाले स्टोरेज पर लागू करता है सिक्योरिटी मॉडल इसे Android 10 में लॉन्च किया गया है. इसमें जगह की संवेदनशील जानकारी के मेटाडेटा को छिपाने के लिए बदलाव करना शामिल है. इस मॉड्यूल को अपडेट किया जा सकता है. इससे Android, सुरक्षा से जुड़ी समस्याओं को तेज़ी से हल कर पाता है और नए मीडिया फ़ॉर्मैट को तेज़ी से जोड़ पाता है. इससे उपयोगकर्ताओं और डेवलपर, दोनों को एक जैसी सुविधाएं मिलती हैं.
Android 10 में हुए बदलाव
Android 10 में, मीडिया फ़ाइलों से डेटा की पहचान करने और उसे निकालने से जुड़े कई सुधार किए गए हैं. इनमें ये शामिल हैं:
फ़ाइल के MIME टाइप के पहले हिस्से का इस्तेमाल करके, फ़ाइल के कॉन्टेंट टाइप का पता लगाना. उदाहरण के लिए, ओएस को यह पता है कि
image/png
औरimage/x-newly-invented-format
इमेज हैं और इसलिए, इनसे सटीक जानकारी मिल सकती है असली उपयोगकर्ता के लिए ज़रूरी अनुमतियां दी जाती हैं.सिर्फ़ फ़ाइल एक्सटेंशन का इस्तेमाल करके एमआईएम टाइप तय करना. साथ ही, सुरक्षा से जुड़ी समस्याओं से बचने के लिए, कॉन्टेंट को स्निफ़ करने की सुविधा का इस्तेमाल न करना.
एक आर्बिट्रेरी फ़ाइल का MIME टाइप तय करने के लिए, अपस्ट्रीम Debian Linux और Android मैपिंग.
video/*
औरaudio/*
फ़ाइलों से (इसके ज़रिए) काम का डेटा लौटाया जा रहा हैMediaMetadataRetriever
) औरimage/*
फ़ाइलें (ExifInterface
के ज़रिए).
Android 11 में हुए बदलाव
Android 11 में, MediaProvider मॉड्यूल Android 10 में किए गए कुछ बदलावों के बारे में नीचे बताया गया है:
इंडेक्स करने की सुविधा को बेहतर बनाया गया है. MediaProvider मॉड्यूल अब MediaStore के सार्वजनिक एपीआई के साथ उपलब्ध मेटाडेटा को मिलाकर, मेटाडेटा को इंडेक्स करता है. बदलाव शामिल करें:
नया
is_favorite
कॉलम औरQUERY_ARG_MATCH_FAVORITE
आर्ग्युमेंट, ताकि गैलरी-स्टाइल वाले ऐप्लिकेशन इस कॉलम के आधार पर मीडिया को तुरंत फ़िल्टर कर सकें.कलर स्पेस का मेटाडेटा इंडेक्स किया जा रहा है.
नया 'is_trashed' चालू करने के लिए, कॉलम और
QUERY_ARG_MATCH_TRASHED
आर्ग्युमेंट गैलरी-स्टाइल के ऐप्लिकेशन का इस्तेमाल कर सकते हैं, जिन्हें इस कॉलम के आधार पर फ़िल्टर किया जा सकता है.नए एपीआई, जो एक ही उपयोगकर्ता के डायलॉग प्रॉम्प्ट की मदद से, कई आइटम में एक साथ बदलाव करने की सुविधा देते हैं. इनमें
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
, औरcreateWriteRequest()
शामिल हैं.नए
GENERATION_ADDED
औरGENERATION_MODIFIED
कॉलम, जिनका इस्तेमाल करके सिंक करने के पिछले पॉइंट के बाद हुए बदलावों का तुरंत और भरोसेमंद तरीके से पता लगाया जा सकता है.अतिरिक्त मेटाडेटा कॉलम के साथ इस्तेमाल के लिए नया
GROUP BY
सार्वजनिक एपीआई जिनका ज़िक्र ऊपर किया गया है.
PNG और WebP कंटेनर से मेटाडेटा निकालने के लिए,
ExifInterface
में सुधार किया गया.स्क्रीन में
DateTimeOriginal
मेटाडेटा लिखने के लिएSystemUI
में सुधार कैप्चर करता है.
इसके अलावा, अब MediaProvider को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, नए मीडिया फ़ॉर्मैट जोड़ें, यह मार्क करें कि किन स्टोरेज डिवाइसों को इंडेक्स किया जाना चाहिए, और MTP स्टैक को बदलें. ज़्यादा जानकारी के लिए, पसंद के मुताबिक बनाएं देखें.
मॉड्यूल की सीमा
Android 11, packages/providers/MediaProvider
में मौजूद सभी कोड को नई जगह पर माइग्रेट करता है. हालांकि, MTP से जुड़े लॉजिक को अपवाद माना गया है. इसके अलावा, अब frameworks/base/core/java/android/provider/MediaStore.java
, packages/providers/MediaProvider
पर मॉड्यूल की सीमा के अंदर है.
पैकेज का फ़ॉर्मैट
MediaProvider मॉड्यूल, APK-in-APEX फ़ॉर्मैट में है.
डिपेंडेंसी
MediaProvider की डिपेंडेंसी, पसंद के मुताबिक बनाने से जुड़ी होती हैं. इसका मतलब है कि अगर MediaProvider को पसंद के मुताबिक बनाया जाता है, तो आपको यह पक्का करना होगा कि आपके लागू किए गए तरीके से, पसंद के मुताबिक बनाने से जुड़ी डिपेंडेंसी पूरी हो.
कस्टम या गैर-स्टैंडर्ड मीडिया फ़ाइल फ़ॉर्मैट (उदाहरण के लिए, किसी वेंडर के कैमरा ऐप्लिकेशन से जनरेट किया गया फ़ॉर्मैट) का इस्तेमाल करते समय, आपको हर कस्टम फ़ॉर्मैट को
MimeUtils
और Media Extractor मॉड्यूल के साथ रजिस्टर करना होगा. ऐसा करने पर, MediaProvider की मदद से इंडेक्स करने की सुविधा चालू हो जाएगी.यह पक्का करने के लिए कि MediaProvider अपनी पसंद के मुताबिक, स्टोरेज डिवाइस (जैसे कि एसडी कार्ड) को इंडेक्स करता है इस्तेमाल करने के लिए,
StorageManagerService
को लागू करने में इस्तेमाल होते हैं, तोVolumeInfo.MOUNT_FLAG_INDEXABLE
फ़्लैग.कस्टम (नॉन-एओएसपी) एमटीपी को लागू करते समय, पक्का करें कि यह नीति लागू करने के लिए पूरी तरह से सार्वजनिक और सिस्टम API पर निर्भर रहती है MediaStore के साथ इंटरैक्ट करें.
पसंद के मुताबिक बनाएं
अब आपके पास नए मीडिया फ़ॉर्मैट जोड़ने, यह तय करने, और MTP स्टैक को बदलने का विकल्प है कि किन स्टोरेज डिवाइसों को इंडेक्स किया जाए.
पसंद के मुताबिक मीडिया फ़ॉर्मैट. हर नए कस्टम मीडिया फ़ॉर्मैट के लिए, आपको MIME प्रकार के लिए विशिष्ट फ़ाइल एक्सटेंशन से मैपिंग की जा सकती है. हमारा सुझाव है कि आप आपको आईएएनए रजिस्ट्रेशन की पुष्टि करनी होगी प्रोसेस.
AOSP में पहले से तय किए गए एक्सटेंशन या MIME टाइप को फिर से तय नहीं किया जा सकता.
video/*
औरaudio/*
फ़ाइलों के लिए, MediaProvider अब भीMediaMetadataRetriever
से सलाह लेता रहेगा. कस्टम फ़ॉर्मैट के लिए मेटाडेटा दिखाने के लिए, Android 10 के मीडिया एक्सट्रैक्टर का इस्तेमाल करें.image/*
फ़ाइलों के लिए, MediaProviderExif
पर इन स्टैंडर्ड के लिए स्टैंडर्ड तय करता रहता है: मेटाडेटा. किसी भी कस्टम इमेज फ़ॉर्मैट के लिए,Exif
मेटाडेटा को निकालने और दिखाने के लिए,android.media.ExifInterface
को बड़ा किया जा सकता है.
स्टोरेज डिवाइस को इंडेक्स करने से जुड़ा फ़्लैग. MediaProvider,
StorageManager.getStorageVolumes()
के ज़रिए दिखाए गए उन सभी वॉल्यूम को इंडेक्स करता है जहांStorageVolume.getMediaStoreVolumeName()
शून्य नहीं है. आपके पास इंडेक्स किए जाने वाले कॉन्टेंट पर असर डालने के लिए, वॉल्यूम की सूची का इस्तेमाल किया जाता है. हालांकि, हमारी सलाह है कि इसमें कुछ समय के लिए आवाज़ (जैसे कि यूएसबी ओटीजी ड्राइव) भी शामिल होती है.MTP स्टैक को बदलना. Android 11 के साथ एमटीपी की जगह मॉड्यूल की सीमा के बाहर स्टैक हो जाता है और पक्का करता है कि यह इसके साथ काम करता है सार्वजनिक एपीआई.
टेस्ट करना
नीचे दिए गए टेस्ट का इस्तेमाल करके, MediaProvider के फ़ंक्शन की पुष्टि की जा सकती है:
MediaStore के सार्वजनिक एपीआई के काम करने के तरीके की पुष्टि करने के लिए, Android कंपैटबिलिटी टेस्ट सुइट (सीटीएस) का
CtsProviderTestCases
पैकेज.MediaProvider इंंटरनल के फ़ंक्शन की पुष्टि करने के लिए,
MediaProviderTests
.
टेस्ट के दोनों सेट को एक साथ चलाने के लिए, atest
कमांड का इस्तेमाल करें:
atest --test-mapping packages/providers/MediaProvider