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 को टारगेट करने से पहले, ऐसी डायरेक्ट्री में डेटा माइग्रेट करें जो स्कोप वाले स्टोरेज के साथ काम करती हो.

स्कोप किए गए स्टोरेज की जांच करना

अपने ऐप्लिकेशन में स्कोप वाला स्टोरेज चालू करने के लिए, ऐप्लिकेशन के साथ काम करने की क्षमता से जुड़े ये फ़्लैग चालू करें. भले ही, आपके ऐप्लिकेशन का टारगेट SDK वर्शन और मेनिफ़ेस्ट फ़्लैग की वैल्यू कुछ भी हो:

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

ब्लॉग पोस्ट

वीडियो