Android 11 (एपीआई लेवल 30) इस प्लैटफ़ॉर्म को और बेहतर बनाता है. इससे बाहरी स्टोरेज में मौजूद ऐप्लिकेशन और उपयोगकर्ता के डेटा को बेहतर सुरक्षा मिलती है. इस रिलीज़ में कई सुधार किए गए हैं. जैसे, रॉ फ़ाइल पाथ का ऐक्सेस, मीडिया के लिए एक साथ कई बदलाव करने की सुविधा, और स्टोरेज ऐक्सेस फ़्रेमवर्क के लिए अपडेट किया गया यूज़र इंटरफ़ेस (यूआई).
इस रिलीज़ में, डिवाइस के स्कोप किए गए स्टोरेज को भी बेहतर बनाया गया है. इससे डेवलपर को इस स्टोरेज मॉडल पर माइग्रेट करने के बाद, स्टोरेज के इस्तेमाल के उदाहरणों को पूरा करने में आसानी होती है.
डिवाइस के स्कोप किए गए स्टोरेज को लागू करना
Android 11 पर चलने वाले, लेकिन Android 10 (एपीआई लेवल 29) को टारगेट करने वाले ऐप्लिकेशन, अब भी requestLegacyExternalStorage एट्रिब्यूट का अनुरोध कर सकते हैं. इस फ़्लैग की मदद से, ऐप्लिकेशन कुछ समय के लिए, डिवाइस के स्कोप किए गए स्टोरेज से जुड़े बदलावों से ऑप्ट आउट कर सकते हैं. जैसे, अलग-अलग डायरेक्ट्री और अलग-अलग तरह की मीडिया फ़ाइलों का ऐक्सेस देना. Android 11 को टारगेट करने के लिए, ऐप्लिकेशन को अपडेट करने के बाद, सिस्टम requestLegacyExternalStorage फ़्लैग को अनदेखा कर देता है.
Android 10 के साथ काम करने की सुविधा बनाए रखना
अगर आपका ऐप्लिकेशन Android 10 डिवाइसों पर काम करते समय, डिवाइस के स्कोप किए गए स्टोरेज से ऑप्ट आउट करता है, तो हमारा सुझाव है कि आप अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में requestLegacyExternalStorage को true पर सेट करना जारी रखें. इस तरह, आपका ऐप्लिकेशन Android 10 पर चलने वाले डिवाइसों पर उम्मीद के मुताबिक काम करता रहेगा.
डेटा को उन डायरेक्ट्री में माइग्रेट करें जो डिवाइस के स्कोप किए गए स्टोरेज का इस्तेमाल करने पर दिखती हैं
अगर आपका ऐप्लिकेशन लेगसी स्टोरेज मॉडल का इस्तेमाल करता है और पहले Android 10 या इससे पहले के वर्शन को टारगेट करता था, तो हो सकता है कि आप डेटा को ऐसी डायरेक्ट्री में सेव कर रहे हों जिसे डिवाइस का स्कोप किया गया स्टोरेज मॉडल चालू होने पर आपका ऐप्लिकेशन ऐक्सेस न कर पाए. Android 11 को टारगेट करने से पहले, डेटा को ऐसी डायरेक्ट्री में माइग्रेट करें जो डिवाइस के स्कोप किए गए स्टोरेज के साथ काम करती हो.
डिवाइस के स्कोप किए गए स्टोरेज की जांच करना
अपने ऐप्लिकेशन में स्कोप किया गया स्टोरेज चालू करने के लिए, ऐप्लिकेशन के साथ काम करने वाले इन फ़्लैग को चालू करें. भले ही, आपके ऐप्लिकेशन का टारगेट एसडीके वर्शन और मेनिफ़ेस्ट फ़्लैग की वैल्यू कुछ भी हो:
DEFAULT_SCOPED_STORAGE(सभी ऐप्लिकेशन के लिए डिफ़ॉल्ट रूप से चालू है)FORCE_ENABLE_SCOPED_STORAGE(सभी ऐप्लिकेशन के लिए, डिफ़ॉल्ट रूप से बंद है)
डिवाइस के स्कोप किए गए स्टोरेज को बंद करने और लेगसी स्टोरेज मॉडल का इस्तेमाल करने के लिए, दोनों फ़्लैग को अनसेट करें.
डिवाइस का स्टोरेज मैनेज करना
Android 11 से, स्कोप किए गए स्टोरेज मॉडल का इस्तेमाल करने वाले ऐप्लिकेशन, सिर्फ़ अपने ऐप्लिकेशन के लिए खास तौर पर बनाई गई कैश फ़ाइलों को ऐक्सेस कर सकते हैं. अगर आपके ऐप्लिकेशन को डिवाइस के स्टोरेज को मैनेज करना है, तो खाली जगह के बारे में क्वेरी करने के तरीके से जुड़े निर्देशों का पालन करें.
ACTION_MANAGE_STORAGEइंटेंट ऐक्शन को शुरू करके, खाली स्टोरेज की जांच करें.अगर डिवाइस में ज़रूरत के मुताबिक स्टोरेज नहीं है, तो उपयोगकर्ता से आपके ऐप्लिकेशन को सभी कैश मेमोरी मिटाने की अनुमति देने के लिए कहें. ऐसा करने के लिए,
ACTION_CLEAR_APP_CACHEइंटेंट ऐक्शन को शुरू करें.
बाहरी स्टोरेज पर ऐप्लिकेशन के लिए खास डायरेक्ट्री
Android 11 से, ऐप्लिकेशन बाहरी स्टोरेज पर ऐप्लिकेशन के लिए खास डायरेक्ट्री नहीं बना सकते. सिस्टम आपके ऐप्लिकेशन के लिए जो डायरेक्ट्री उपलब्ध कराता है उसे ऐक्सेस करने के लिए, getExternalFilesDirs() को कॉल करें.
मीडिया फ़ाइल का ऐक्सेस
उपयोगकर्ता की निजता को बनाए रखते हुए, मीडिया को आसानी से ऐक्सेस करने के लिए, Android 11 में ये सुविधाएं जोड़ी गई हैं.
एक साथ कई कार्रवाइयां करना
सभी डिवाइसों पर एक जैसा अनुभव देने और उपयोगकर्ताओं की सुविधा के लिए, Android 11 में कई ऐसे तरीके जोड़े गए हैं जिनसे मीडिया फ़ाइलों के ग्रुप को मैनेज करना आसान हो जाता है.
डायरेक्ट फ़ाइल पाथ और नेटिव लाइब्रेरी का इस्तेमाल करके फ़ाइलें ऐक्सेस करना
Android 11 में, MediaStore एपीआई के अलावा अन्य एपीआई इस्तेमाल किए जा सकते हैं. इससे आपका ऐप्लिकेशन, तीसरे पक्ष की मीडिया लाइब्रेरी के साथ बेहतर तरीके से काम कर पाता है. इन एपीआई की मदद से, डायरेक्ट फ़ाइल पाथ का इस्तेमाल करके, शेयर किए गए स्टोरेज से मीडिया फ़ाइलें ऐक्सेस की जा सकती हैं. इन एपीआई में ये शामिल हैं:
Fileएपीआई.- नेटिव लाइब्रेरी, जैसे कि
fopen().
अन्य ऐप्लिकेशन से डेटा ऐक्सेस करना
उपयोगकर्ता की निजता को सुरक्षित रखने के लिए, Android 11 या इसके बाद के वर्शन वाले डिवाइसों पर, सिस्टम आपके ऐप्लिकेशन को अन्य ऐप्लिकेशन की निजी डायरेक्ट्री ऐक्सेस करने से रोकता है.
डिवाइस के स्टोरेज में मौजूद डेटा डायरेक्ट्री का ऐक्सेस
Android 9 (एपीआई लेवल 28) से, इस बात पर पाबंदी लगाई गई कि कौनसे ऐप्लिकेशन, डिवाइस के स्टोरेज में मौजूद डेटा डायरेक्ट्री में मौजूद फ़ाइलों को अन्य ऐप्लिकेशन के लिए ऐक्सेस करने लायक बना सकते हैं. Android 9 या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, अपनी डेटा डायरेक्ट्री में मौजूद फ़ाइलों को सभी के लिए ऐक्सेस करने लायक नहीं बना सकते.
Android 11 में इस पाबंदी को और बढ़ाया गया है. अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है, तो वह किसी दूसरे ऐप्लिकेशन की डेटा डायरेक्ट्री में मौजूद फ़ाइलों को ऐक्सेस नहीं कर सकता. भले ही, दूसरा ऐप्लिकेशन Android 8.1 (एपीआई लेवल 27) या इससे पहले के वर्शन को टारगेट करता हो और उसने अपनी डेटा डायरेक्ट्री में मौजूद फ़ाइलों को सभी के लिए उपलब्ध कराया हो.
बाहरी स्टोरेज पर मौजूद, ऐप्लिकेशन के लिए खास तौर पर बनाई गई डायरेक्ट्री का ऐक्सेस
Android 11 पर, ऐप्लिकेशन अब बाहरी स्टोरेज में मौजूद किसी दूसरे ऐप्लिकेशन की खास तौर पर बनाई गई डायरेक्ट्री में मौजूद फ़ाइलों को ऐक्सेस नहीं कर सकते.
दस्तावेज़ के ऐक्सेस से जुड़ी पाबंदियां
डेवलपर को टेस्टिंग के लिए समय देने के लिए, स्टोरेज ऐक्सेस फ़्रेमवर्क (एसएएफ़) से जुड़े ये बदलाव सिर्फ़ तब लागू होंगे, जब आपका ऐप्लिकेशन Android 11 या इसके बाद के वर्शन को टारगेट करता हो.
डायरेक्ट्री का ऐक्सेस
इन डायरेक्ट्री का ऐक्सेस पाने के लिए, अब
ACTION_OPEN_DOCUMENT_TREE
इंटेंट ऐक्शन का इस्तेमाल नहीं किया जा सकता:
- डिवाइस के स्टोरेज वॉल्यूम की रूट डायरेक्ट्री.
- हर एसडी कार्ड वॉल्यूम की रूट डायरेक्ट्री, जिसे डिवाइस बनाने वाली कंपनी भरोसेमंद मानती है. भले ही, कार्ड को एम्युलेट किया गया हो या हटाया जा सकता हो. भरोसेमंद वॉल्यूम वह होता है जिसे कोई ऐप्लिकेशन ज़्यादातर समय ऐक्सेस कर सकता है.
Downloadडायरेक्ट्री.
फ़ाइलों का ऐक्सेस
अब
ACTION_OPEN_DOCUMENT_TREE
या
ACTION_OPEN_DOCUMENT
इंटेंट ऐक्शन का इस्तेमाल करके, उपयोगकर्ता से इन डायरेक्ट्री में मौजूद अलग-अलग फ़ाइलों को चुनने का अनुरोध नहीं किया जा सकता:
Android/data/डायरेक्ट्री और सभी सबडायरेक्ट्री.Android/obb/डायरेक्ट्री और सभी सबडायरेक्ट्री.
बदलाव की जांच करना
इस बदलाव को टेस्ट करने के लिए, यह तरीका अपनाएं:
ACTION_OPEN_DOCUMENTकार्रवाई की मदद से, इंटेंट को शुरू करें. देखें किAndroid/data/औरAndroid/obb/, दोनों डायरेक्ट्री न दिखें.- इनमें से कोई एक काम करें:
RESTRICT_STORAGE_ACCESS_FRAMEWORKऐप्लिकेशन के साथ काम करने की सुविधा का फ़्लैग चालू करें.- Android 11 या इसके बाद के वर्शन को टारगेट करना चाहिए.
ACTION_OPEN_DOCUMENT_TREEकार्रवाई की मदद से, इंटेंट को ट्रिगर करना. देखें किDownloadडायरेक्ट्री दिख रही है या नहीं. साथ ही, यह भी देखें कि डायरेक्ट्री से जुड़ा ऐक्शन बटन धूसर हो गया है या नहीं.
अनुमतियां
Android 11 में, स्टोरेज की अनुमतियों से जुड़े ये बदलाव किए गए हैं.
किसी भी वर्शन को टारगेट करना
READ_EXTERNAL_STORAGE की अनुमति का अनुरोध करता है.आपके ऐप्लिकेशन के टारगेट एसडीके वर्शन के बावजूद, Android 11 में ये बदलाव लागू होंगे:
- स्टोरेज के रनटाइम की अनुमति का नाम बदलकर, फ़ाइलें और मीडिया कर दिया गया है.
अगर आपके ऐप्लिकेशन ने डिवाइस के स्कोप किए गए स्टोरेज से ऑप्ट आउट नहीं किया है और
READ_EXTERNAL_STORAGEअनुमति का अनुरोध किया है, तो उपयोगकर्ताओं को Android 10 की तुलना में अलग डायलॉग बॉक्स दिखता है. डायलॉग बॉक्स से पता चलता है कि आपका ऐप्लिकेशन, फ़ोटो और मीडिया को ऐक्सेस करने का अनुरोध कर रहा है. जैसा कि इमेज 1 में दिखाया गया है.उपयोगकर्ता, सिस्टम की सेटिंग में जाकर देख सकते हैं कि किन ऐप्लिकेशन के पास
READ_EXTERNAL_STORAGEकी अनुमति है. सेटिंग > निजता > अनुमतियों को मैनेज करें > फ़ाइलें और मीडिया पेज पर, अनुमति वाले हर ऐप्लिकेशन को सभी फ़ाइलों के लिए अनुमति है सेक्शन में दिखाया जाता है. अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है, तो ध्यान रखें कि "सभी फ़ाइलों" का यह ऐक्सेस सिर्फ़ पढ़ने के लिए है. इस ऐप्लिकेशन का इस्तेमाल करके, शेयर किए गए स्टोरेज में मौजूद सभी फ़ाइलों को पढ़ने और उनमें बदलाव करने के लिए, आपके पास सभी फ़ाइलों को ऐक्सेस करने की अनुमति होनी चाहिए.
Android 11 को टारगेट करना
अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है, तो WRITE_EXTERNAL_STORAGE अनुमति और WRITE_MEDIA_STORAGE खास अनुमति, दोनों से अब कोई अतिरिक्त ऐक्सेस नहीं मिलता.
ध्यान रखें कि Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन वाले डिवाइसों पर, आपका ऐप्लिकेशन स्टोरेज से जुड़ी किसी भी अनुमति का अनुरोध किए बिना, MediaStore.Downloads जैसे मीडिया कलेक्शन में योगदान दे सकता है. अपने ऐप्लिकेशन में मीडिया फ़ाइलों के साथ काम करते समय, सिर्फ़ ज़रूरी अनुमतियों का अनुरोध करने के तरीके के बारे में ज़्यादा जानें.
सभी फ़ाइलों का ऐक्सेस
शेयर किए गए स्टोरेज को ऐक्सेस करने की ज़रूरत वाले ज़्यादातर ऐप्लिकेशन, मीडिया फ़ाइलें शेयर करने और मीडिया के अलावा अन्य फ़ाइलें शेयर करने के सबसे सही तरीके अपना सकते हैं. हालांकि, कुछ ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए, डिवाइस पर मौजूद फ़ाइलों को बार-बार या हमेशा ऐक्सेस करने की ज़रूरत होती है. हालांकि, निजता को बनाए रखने वाले स्टोरेज के सबसे सही तरीकों का इस्तेमाल करके, ऐसा नहीं किया जा सकता. Android, ऐसी स्थितियों के लिए ऐप्लिकेशन को एक खास ऐक्सेस देता है. इसे सभी फ़ाइलों का ऐक्सेस कहा जाता है. ज़्यादा जानने के लिए, स्टोरेज डिवाइस पर सभी फ़ाइलें मैनेज करने की गाइड देखें.
अन्य संसाधन
Android 11 में स्टोरेज से जुड़े बदलावों के बारे में ज़्यादा जानने के लिए, यह कॉन्टेंट देखें: