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 में स्टोरेज से जुड़े बदलावों के बारे में ज़्यादा जानने के लिए, यहां दिया गया कॉन्टेंट देखें: