Android 11 में स्टोरेज से जुड़े अपडेट

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 से, स्कोप वाले स्टोरेज मॉडल का इस्तेमाल करने वाले ऐप्लिकेशन सिर्फ़ अपने ऐप्लिकेशन के लिए बनी कैश मेमोरी फ़ाइलों को ऐक्सेस कर सकते हैं. अगर आपके ऐप्लिकेशन को डिवाइस का स्टोरेज मैनेज करना है, तो खाली जगह के बारे में क्वेरी करने के तरीके के बारे में बताए गए निर्देशों का पालन करें.

  1. ACTION_MANAGE_STORAGE इंटेंट ऐक्शन को लागू करके, खाली जगह की जांच करें.
  2. अगर डिवाइस में ज़रूरत के मुताबिक जगह नहीं है, तो उपयोगकर्ता से सभी कैश मेमोरी मिटाने के लिए, ऐप्लिकेशन को सहमति देने के लिए कहें. ऐसा करने के लिए, 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 पर, ऐप्लिकेशन अब बाहरी स्टोरेज में किसी दूसरे ऐप्लिकेशन की खास तौर पर बनाई गई, ऐप्लिकेशन के लिए बनी डायरेक्ट्री में मौजूद फ़ाइलों को ऐक्सेस नहीं कर सकते.

दस्तावेज़ के ऐक्सेस से जुड़ी पाबंदियां

डेवलपर को टेस्टिंग के लिए समय देने के लिए, स्टोरेज ऐक्सेस फ़्रेमवर्क (SAF) से जुड़े ये बदलाव सिर्फ़ तब लागू होंगे, जब आपका ऐप्लिकेशन Android 11 या उसके बाद के वर्शन को टारगेट करता हो.

डायरेक्ट्री का ऐक्सेस

इन डायरेक्ट्री के ऐक्सेस का अनुरोध करने के लिए, अब ACTION_OPEN_DOCUMENT_TREE इंटेंट ऐक्शन का इस्तेमाल नहीं किया जा सकता:

  • डिवाइस के स्टोरेज वॉल्यूम की रूट डायरेक्ट्री.
  • हर उस एसडी कार्ड वॉल्यूम की रूट डायरेक्ट्री जिसे डिवाइस बनाने वाली कंपनी भरोसेमंद मानती है. भले ही, कार्ड को एमुलेट किया गया हो या उसे हटाया जा सकता हो. भरोसेमंद वॉल्यूम वह होता है जिसे ऐप्लिकेशन ज़्यादातर समय ऐक्सेस कर सकता है.
  • Download डायरेक्ट्री.

फ़ाइलों का ऐक्सेस

अब इन डायरेक्ट्री से अलग-अलग फ़ाइलें चुनने का अनुरोध करने के लिए, ACTION_OPEN_DOCUMENT_TREE या ACTION_OPEN_DOCUMENT इंटेंट ऐक्शन का इस्तेमाल नहीं किया जा सकता:

  • Android/data/ डायरेक्ट्री और सभी सबडायरेक्ट्री.
  • Android/obb/ डायरेक्ट्री और सभी सबडायरेक्ट्री.

बदलाव की जांच करना

व्यवहार में हुए इस बदलाव की जांच करने के लिए, यह तरीका अपनाएं:

  1. ACTION_OPEN_DOCUMENT ऐक्शन की मदद से इंटेंट को ट्रिगर करें. देखें कि Android/data/ और Android/obb/, दोनों डायरेक्ट्री न दिखें.
  2. इनमें से कोई एक काम करें:
    • RESTRICT_STORAGE_ACCESS_FRAMEWORK ऐप्लिकेशन के साथ काम करने की सुविधा का फ़्लैग चालू करें.
    • Android 11 या उसके बाद के वर्शन को टारगेट करें.
  3. ACTION_OPEN_DOCUMENT_TREE ऐक्शन की मदद से इंटेंट को ट्रिगर करें. देखें कि Download डायरेक्ट्री दिख रही है या नहीं. साथ ही, डायरेक्ट्री से जुड़ा ऐक्शन बटन स्लेटी रंग का हो गया है या नहीं.

अनुमतियां

Android 11 में, स्टोरेज से जुड़ी अनुमतियों से जुड़े ये बदलाव किए गए हैं.

किसी भी वर्शन को टारगेट करना

पहले डायलॉग में, 'सेटिंग में जाकर अनुमति दें' नाम का एक लिंक दिखता है
पहला डायग्राम. यह डायलॉग तब दिखता है, जब कोई ऐप्लिकेशन स्कोप किए गए स्टोरेज का इस्तेमाल करता है और READ_EXTERNAL_STORAGE अनुमति का अनुरोध करता है.

Android 11 में ये बदलाव लागू होंगे. भले ही, आपके ऐप्लिकेशन के लिए टारगेट किया गया SDK टूल का वर्शन कुछ भी हो:

  • स्टोरेज रनटाइम की अनुमति का नाम बदलकर फ़ाइलें और मीडिया कर दिया गया है.
  • अगर आपके ऐप्लिकेशन ने स्कोप वाले स्टोरेज से ऑप्ट आउट नहीं किया है और वह READ_EXTERNAL_STORAGE की अनुमति का अनुरोध करता है, तो उपयोगकर्ताओं को Android 10 की तुलना में एक अलग डायलॉग दिखता है. डायलॉग बॉक्स से पता चलता है कि आपका ऐप्लिकेशन फ़ोटो और मीडिया को ऐक्सेस करने का अनुरोध कर रहा है, जैसा कि पहला इमेज में दिखाया गया है.

    उपयोगकर्ता, सिस्टम की सेटिंग में जाकर देख सकते हैं कि किन ऐप्लिकेशन के पास READ_EXTERNAL_STORAGE अनुमति है. सेटिंग > निजता > अनुमति मैनेजर > फ़ाइलें और मीडिया पेज पर, जिस ऐप्लिकेशन के पास अनुमति है वह सभी फ़ाइलों के लिए अनुमति है में दिखता है. अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है, तो ध्यान रखें कि "सभी फ़ाइलों" का यह ऐक्सेस, सिर्फ़ पढ़ने के लिए है. इस ऐप्लिकेशन का इस्तेमाल करके, शेयर किए गए स्टोरेज में मौजूद सभी फ़ाइलों को और उनमें बदलाव करने के लिए, आपके पास सभी फ़ाइलों को ऐक्सेस करने की अनुमति होनी चाहिए.

Android 11 को टारगेट करना

अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है, तो WRITE_EXTERNAL_STORAGE अनुमति और WRITE_MEDIA_STORAGE विशेष अनुमति, दोनों अब कोई अतिरिक्त ऐक्सेस नहीं देती हैं.

ध्यान रखें कि Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन वाले डिवाइसों पर, आपका ऐप्लिकेशन स्टोरेज से जुड़ी किसी भी अनुमति का अनुरोध किए बिना, MediaStore.Downloads जैसे मीडिया कलेक्शन में योगदान दे सकता है. अपने ऐप्लिकेशन में मीडिया फ़ाइलों के साथ काम करते समय, सिर्फ़ ज़रूरी अनुमतियों का अनुरोध करने के तरीके के बारे में ज़्यादा जानें.

सभी फ़ाइलों का ऐक्सेस

जिन ज़्यादातर ऐप्लिकेशन को शेयर किए गए स्टोरेज का ऐक्सेस चाहिए वे मीडिया फ़ाइलें शेयर करने और मीडिया फ़ाइलें शेयर करने के सबसे सही तरीकों का पालन कर सकते हैं. हालांकि, कुछ ऐप्लिकेशन के मुख्य इस्तेमाल के उदाहरण के लिए, डिवाइस पर मौजूद फ़ाइलों का ऐक्सेस ज़रूरी होता है. हालांकि, निजता को बनाए रखने वाले स्टोरेज के सबसे सही तरीकों का इस्तेमाल करके, ऐसा नहीं किया जा सकता. Android, इन स्थितियों के लिए ऐप्लिकेशन को एक खास अनुमति देता है. इसे सभी फ़ाइलों का ऐक्सेस कहा जाता है. ज़्यादा जानने के लिए, स्टोरेज डिवाइस पर सभी फ़ाइलों को मैनेज करने का तरीका बताने वाली गाइड देखें.

अन्य संसाधन

Android 11 में स्टोरेज से जुड़े बदलावों के बारे में ज़्यादा जानने के लिए, यहां दिए गए कॉन्टेंट देखें:

ब्लॉग पोस्ट

वीडियो