मीडियाप्रदाता मॉड्यूल

MediaProvider मॉड्यूल अनुक्रमित मेटाडेटा (एसडी कार्ड और यूएसबी डिवाइस से ऑडियो, वीडियो और छवियां) को अनुकूलित करता है और मीडियास्टोर सार्वजनिक एपीआई के माध्यम से उस डेटा को ऐप्स के लिए उपलब्ध कराता है। उपयोगकर्ता की गोपनीयता बनाए रखने के लिए, MediaProvider मॉड्यूल एंड्रॉइड 10 में पेश किए गए स्कोप्ड स्टोरेज सुरक्षा मॉडल को लागू करता है, जिसमें संवेदनशील स्थान मेटाडेटा को संशोधित करना शामिल है। यह मॉड्यूल अद्यतन करने योग्य है, जो एंड्रॉइड को सुरक्षा मुद्दों पर तेजी से प्रतिक्रिया देने (संवेदनशील उपयोगकर्ता डेटा को सुरक्षित रखने) और नए मीडिया प्रारूपों को तेजी से जोड़ने (उपयोगकर्ताओं और डेवलपर्स दोनों को स्थिरता प्रदान करने) में सक्षम बनाता है।

एंड्रॉइड 10 में बदलाव

एंड्रॉइड 10 ने विशेष रूप से मीडिया फ़ाइलों से डेटा की पहचान करने और निकालने से संबंधित कई सुधार पेश किए:

  • फ़ाइल के MIME प्रकार के पहले भाग का उपयोग करके फ़ाइल सामग्री प्रकार का निर्धारण करना। उदाहरण के लिए, ओएस जानता है कि image/png और image/x-newly-invented-format दोनों छवियां हैं, और इस प्रकार अंतिम उपयोगकर्ता के लिए प्रासंगिक अनुमतियों का सटीक वर्णन कर सकते हैं।

  • केवल फ़ाइल एक्सटेंशन का उपयोग करके (और सुरक्षा समस्याओं से बचने के लिए सामग्री सूँघने के बिना) MIME प्रकार का निर्धारण करना।

  • अपस्ट्रीम डेबियन लिनक्स और एंड्रॉइड मैपिंग के संयोजन का उपयोग करके एक मनमानी फ़ाइल के MIME प्रकार का निर्धारण करना।

  • video/* और audio/* फ़ाइलों ( MediaMetadataRetriever के माध्यम से) और image/* फ़ाइलों ( ExifInterface के माध्यम से) से प्रासंगिक डेटा लौटाना।

एंड्रॉइड 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

  • पीएनजी और वेबपी कंटेनरों से मेटाडेटा निकालने के लिए ExifInterface में सुधार।

  • स्क्रीन कैप्चर में DateTimeOriginal मेटाडेटा लिखने के लिए SystemUI में सुधार।

इसके अलावा, अब आप नए मीडिया प्रारूप जोड़कर MediaProvider को अनुकूलित कर सकते हैं, यह चिह्नित कर सकते हैं कि कौन से स्टोरेज डिवाइस को अनुक्रमित किया जाना चाहिए, और यहां तक ​​कि एमटीपी स्टैक को भी बदल सकते हैं। विवरण के लिए, अनुकूलन देखें।

मॉड्यूल सीमा

एमटीपी-संबंधित तर्क के उल्लेखनीय अपवाद के साथ, एंड्रॉइड 11 packages/providers/MediaProvider के सभी कोड को एक नए स्थान पर माइग्रेट करता है। इसके अलावा, frameworks/base/core/java/android/provider/MediaStore.java अब packages/providers/MediaProvider पर मॉड्यूल सीमा के अंदर है।

पैकेज प्रारूप

MediaProvider मॉड्यूल एपीके-इन-एपेक्स प्रारूप में है।

निर्भरताएँ

MediaProvider निर्भरताएं अनुकूलन से संबंधित हैं (अर्थात, यदि आप MediaProvider को अनुकूलित करते हैं, तो आपको यह सुनिश्चित करना होगा कि आपका कार्यान्वयन आपके अनुकूलन से जुड़ी निर्भरता को पूरा करता है)।

  • कस्टम या गैर-मानक मीडिया फ़ाइल स्वरूपों (उदाहरण के लिए, विक्रेता-विशिष्ट कैमरा ऐप द्वारा उत्पन्न प्रारूप) का उपयोग करते समय, आपको MediaProvider द्वारा अनुक्रमण को सक्षम करने के लिए प्रत्येक कस्टम प्रारूप को MimeUtils और मीडिया एक्सट्रैक्टर मॉड्यूल के साथ पंजीकृत करना होगा।

  • यह सुनिश्चित करने के लिए कि MediaProvider StorageManagerService कार्यान्वयन में उपयोग किए जाने वाले स्टोरेज डिवाइस (जैसे एसडी कार्ड स्लॉट और यूएसबी पोर्ट) के एक कस्टम सेट को अनुक्रमित करता है, VolumeInfo.MOUNT_FLAG_INDEXABLE ध्वज सेट करें।

  • कस्टम (गैर-एओएसपी) एमटीपी कार्यान्वयन का उपयोग करते समय, सुनिश्चित करें कि कार्यान्वयन मीडियास्टोर के साथ बातचीत करने में सक्षम करने के लिए कार्यान्वयन पूरी तरह से सार्वजनिक और सिस्टम एपीआई पर निर्भर करता है।

अनुकूलन

अब आप नए मीडिया प्रारूप जोड़ सकते हैं, प्रभावित कर सकते हैं कि कौन से स्टोरेज डिवाइस अनुक्रमित हैं, और एमटीपी स्टैक को प्रतिस्थापित कर सकते हैं।

  • कस्टम मीडिया प्रारूप. प्रत्येक नए कस्टम मीडिया प्रारूप के लिए, आपको अद्वितीय फ़ाइल एक्सटेंशन से MIME प्रकार तक मैपिंग प्रदान करनी होगी। हम आपको आईएएनए पंजीकरण प्रक्रिया का पालन करने के लिए दृढ़ता से प्रोत्साहित करते हैं।

    • आप किसी एक्सटेंशन या MIME प्रकार को फिर से परिभाषित नहीं कर सकते जो पहले से ही AOSP में परिभाषित है।

    • video/* और audio/* फ़ाइलों के लिए, MediaProvider MediaMetadataRetriever परामर्श करना जारी रखता है। कस्टम प्रारूपों के लिए मेटाडेटा वापस करने के लिए एंड्रॉइड 10 मीडिया एक्सट्रैक्टर्स का उपयोग करें।

    • image/* फ़ाइलों के लिए, MediaProvider मेटाडेटा के लिए Exif पर मानकीकरण जारी रखता है। आप किसी भी कस्टम छवि प्रारूप के लिए Exif मेटाडेटा निकालने और वापस करने के लिए android.media.ExifInterface विस्तार कर सकते हैं।

  • भंडारण उपकरण अनुक्रमण ध्वज. MediaProvider StorageManager.getStorageVolumes() द्वारा लौटाए गए सभी वॉल्यूम को अनुक्रमित करता है जहां StorageVolume.getMediaStoreVolumeName() गैर-शून्य है। आप अनुक्रमित किए गए वॉल्यूम को प्रभावित करने के लिए लौटाए गए वॉल्यूम की सूची को कस्टमाइज़ कर सकते हैं, लेकिन हम क्षणिक वॉल्यूम (जैसे यूएसबी ओटीजी ड्राइव) को शामिल करने के खिलाफ सलाह देते हैं।

  • एमटीपी स्टैक प्रतिस्थापन। एंड्रॉइड 11 एमटीपी स्टैक को पूरी तरह से मॉड्यूल सीमा के बाहर रखता है और यह सुनिश्चित करता है कि यह सार्वजनिक एपीआई के खिलाफ काम करता है।

परिक्षण

आप निम्नलिखित परीक्षणों का उपयोग करके MediaProvider की कार्यक्षमता को सत्यापित कर सकते हैं:

  • MediaStore सार्वजनिक API की कार्यक्षमता को सत्यापित करने के लिए, Android संगतता परीक्षण सूट (CTS) के CtsProviderTestCases पैकेज में परीक्षणों का उपयोग करें।

  • MediaProvider आंतरिक की कार्यक्षमता को सत्यापित करने के लिए, MediaProviderTests में परीक्षणों का उपयोग करें।

परीक्षणों के दोनों सेटों को एक साथ चलाने के लिए, निम्नलिखित atest कमांड का उपयोग करें:

atest --test-mapping packages/providers/MediaProvider