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

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

डेवलपर को टेस्टिंग के लिए समय देने के मकसद से, स्टोरेज ऐक्सेस फ़्रेमवर्क (एसएएफ़) से जुड़े ये बदलाव सिर्फ़ तब लागू होंगे, जब आपका ऐप्लिकेशन 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 में ये बदलाव लागू होते हैं:

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

ब्लॉग पोस्ट

वीडियो