MediaProvider मॉड्यूल

MediaProvider मॉड्यूल, इंडेक्स किए गए मेटाडेटा (ऑडियो, वीडियो, और इमेज) को ऑप्टिमाइज़ करता है एसडी कार्ड और USB डिवाइसेस से) डाउनलोड और उस डेटा को MediaStore सार्वजनिक APIs. उपयोगकर्ता की निजता बनाए रखने के लिए, 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 को अपनी ज़रूरत के मुताबिक बना सकते हैं, यह मार्क करना कि किन स्टोरेज डिवाइसों को इंडेक्स किया जाना चाहिए. साथ ही, एमटीपी को बदला भी जा सकता है स्टैक. ज़्यादा जानकारी के लिए, पसंद के मुताबिक बनाएं देखें.

मॉड्यूल की सीमा

Android 11, packages/providers/MediaProvider से नई जगह के लिए, जिसमें एक खास अपवाद भी है बहुत ज़रूरी है. इसके अलावा, frameworks/base/core/java/android/provider/MediaStore.java अब के अंदर है मॉड्यूल की सीमा packages/providers/MediaProvider पर है.

पैकेज फ़ॉर्मैट

MediaProvider मॉड्यूल APK-in-APEX फ़ॉर्मैट में है.

डिपेंडेंसी

MediaProvider डिपेंडेंसी कस्टमाइज़ेशन से जुड़ी होती हैं (जो अगर MediaProvider को कस्टमाइज़ किया जाता है, तो आपको यह पक्का करना होगा कि आपकी लागू की गई प्रोसेस, पसंद के मुताबिक बनाने से जुड़ी डिपेंडेंसी).

  • कस्टम या नॉन-स्टैंडर्ड मीडिया फ़ाइल फ़ॉर्मैट का इस्तेमाल करते समय, जैसे कि जो खास तौर पर वेंडर के लिए Camera ऐप्लिकेशन से जनरेट होता है, तो आपको अपनी पसंद के मुताबिक हर MimeUtils और मीडिया एक्सट्रैक्टर मॉड्यूल के साथ फ़ॉर्मैट करें, ताकि इंडेक्स करने की सुविधा चालू हो सके MediaProvider.

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

  • कस्टम (बिना एओएसपी) एमटीपी को लागू करते समय, पक्का करें कि यह नीति लागू करने के लिए पूरी तरह से सार्वजनिक और सिस्टम API पर निर्भर रहती है MediaStore के साथ इंटरैक्ट करें.

पसंद के मुताबिक बनाएं

अब नए मीडिया फ़ॉर्मैट जोड़े जा सकते हैं. इससे यह तय किया जा सकता है कि कौनसे स्टोरेज डिवाइसों को इंडेक्स किया जाए, और MTP स्टैक को बदलें.

  • पसंद के मुताबिक मीडिया फ़ॉर्मैट. हर नए कस्टम मीडिया फ़ॉर्मैट के लिए, आपको MIME प्रकार में विशिष्ट फ़ाइल एक्सटेंशन से मैपिंग किया जा सकता है. हमारा सुझाव है कि आप आपको आईएएनए रजिस्ट्रेशन की पुष्टि करनी होगी प्रोसेस.

    • AOSP में पहले से तय किए गए एक्सटेंशन या MIME टाइप को फिर से तय नहीं किया जा सकता.

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

    • image/* फ़ाइलों के लिए, MediaProvider Exif पर इन स्टैंडर्ड के लिए स्टैंडर्ड तय करता रहता है: मेटाडेटा. android.media.ExifInterface की अवधि को एक्सट्रैक्ट करके वापस किया जा सकता है किसी भी कस्टम इमेज फ़ॉर्मैट के लिए Exif मेटाडेटा.

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

  • MTP स्टैक को बदलना. Android 11 के साथ एमटीपी की जगह मॉड्यूल की सीमा के बाहर स्टैक हो जाता है और पक्का करता है कि यह इसके साथ काम करता है सार्वजनिक एपीआई.

टेस्ट करना

नीचे दिए गए टेस्ट का इस्तेमाल करके, MediaProvider के फ़ंक्शन की पुष्टि की जा सकती है:

  • MediaStore के सार्वजनिक एपीआई के काम करने के तरीके की पुष्टि करने के लिए, Android कंपैटबिलिटी टेस्ट सुइट (सीटीएस) का CtsProviderTestCases पैकेज.

  • MediaProvider इंंटरनल के फ़ंक्शन की पुष्टि करने के लिए, MediaProviderTests.

टेस्ट के दोनों सेट को एक साथ चलाने के लिए, atest कमांड का इस्तेमाल करें:

atest --test-mapping packages/providers/MediaProvider