स्टोरेज डिवाइस पर मौजूद सभी फ़ाइलें मैनेज करना

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

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

सभी फ़ाइलों का ऐक्सेस पाने का अनुरोध करना

कोई ऐप्लिकेशन, उपयोगकर्ता से सभी फ़ाइलों का ऐक्सेस पाने का अनुरोध कर सकता है. इसके लिए, उसे यह तरीका अपनाना होगा:

  1. मेनिफ़ेस्ट में MANAGE_EXTERNAL_STORAGE अनुमति का एलान करें.
  2. उपयोगकर्ताओं को सिस्टम सेटिंग पेज पर ले जाने के लिए, ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION इंटेंट ऐक्शन का इस्तेमाल करें. यहां वे आपके ऐप्लिकेशन के लिए, यह विकल्प चालू कर सकते हैं: सभी फ़ाइलों को मैनेज करने का ऐक्सेस दें.

आपके ऐप्लिकेशन को MANAGE_EXTERNAL_STORAGE की अनुमति मिली है या नहीं, यह पता करने के लिए Environment.isExternalStorageManager() पर कॉल करें.

MANAGE_EXTERNAL_STORAGE की अनुमति वाले ऑपरेशन

MANAGE_EXTERNAL_STORAGE की अनुमति से ये अनुमतियां मिलती हैं:

  • शेयर किए गए स्टोरेज में मौजूद सभी फ़ाइलों को पढ़ने और उनमें बदलाव करने का ऐक्सेस.

  • MediaStore.Files टेबल के कॉन्टेंट का ऐक्सेस.

  • यूएसबी ऑन-द-गो (OTG) ड्राइव और एसडी कार्ड, दोनों की रूट डायरेक्ट्री का ऐक्सेस.

  • /Android/data/, /sdcard/Android, और /sdcard/Android की ज़्यादातर सबडायरेक्ट्री को छोड़कर, डिवाइस के स्टोरेज की सभी डायरेक्ट्री में लिखने का ऐक्सेस. लिखने का यह ऐक्सेस, फ़ाइल के डायरेक्ट पाथ का ऐक्सेस भी शामिल करता है.

    जिन ऐप्लिकेशन को यह अनुमति दी गई है वे अब भी दूसरे ऐप्लिकेशन की ऐप्लिकेशन के हिसाब से बनाई गई डायरेक्ट्री को ऐक्सेस नहीं कर सकते, क्योंकि ये डायरेक्ट्री स्टोरेज वॉल्यूम पर Android/data/ की सबडायरेक्ट्री के तौर पर दिखती हैं.

जब किसी ऐप्लिकेशन के पास MANAGE_EXTERNAL_STORAGE अनुमति होती है, तो वह MediaStore एपीआई या डायरेक्ट फ़ाइल पाथ का इस्तेमाल करके, इन अतिरिक्त फ़ाइलों और डायरेक्ट्री को ऐक्सेस कर सकता है. स्टोरेज के ऐक्सेस फ़्रेमवर्क का इस्तेमाल करने पर, MANAGE_EXTERNAL_STORAGE की अनुमति के बिना ही किसी फ़ाइल या डायरेक्ट्री को ऐक्सेस किया जा सकता है.

किसी दूसरे ऐप्लिकेशन की स्टोरेज मैनेजमेंट गतिविधि को शुरू करना

Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन पर, जिन ऐप्लिकेशन के पास MANAGE_EXTERNAL_STORAGE और QUERY_ALL_PACKAGES, दोनों अनुमतियां होती हैं वे उपयोगकर्ताओं को किसी दूसरे ऐप्लिकेशन की पसंद के मुताबिक स्पेस मैनेज करने की गतिविधि पर भेजने के लिए, getManageSpaceActivityIntent() का इस्तेमाल कर सकते हैं. जैसे, फ़ाइल मैनेजमेंट ऐप्लिकेशन.

getManageSpaceActivityIntent() तरीका, पैकेज का नाम और अनुरोध कोड लेता है. साथ ही, इससे इनमें से कोई एक वैल्यू मिलती है:

  • PendingIntent, अगर पैकेज के बताए गए नाम वाले ऐप्लिकेशन में, "स्पेस मैनेज करें" गतिविधि को पसंद के मुताबिक बनाया गया है. getManageSpaceActivityIntent() तरीके को कॉल करने वाला फ़ाइल मैनेजमेंट ऐप्लिकेशन, उपयोगकर्ताओं को कस्टम गतिविधि पर भेजने के लिए, रिटर्न किए गए इंटेंट को फिर से शुरू कर सकता है.
  • null, अगर पैकेज के बताए गए नाम वाला ऐप्लिकेशन, "स्पेस मैनेज करें" गतिविधि की जानकारी नहीं देता है.

जांच के लिए MANAGE_EXTERNAL_STORAGE चालू करना

यह जानने के लिए कि MANAGE_EXTERNAL_STORAGE अनुमति आपके ऐप्लिकेशन पर कैसे असर डालती है, आपके पास जांच के लिए अनुमति चालू करने का विकल्प है. ऐसा करने के लिए, अपने टेस्ट डिवाइस से कनेक्ट की गई मशीन पर, यहां दिया गया कमांड चलाएं:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Google Play की सूचना

इस सेक्शन में, Google Play पर ऐप्लिकेशन पब्लिश करने वाले डेवलपर के लिए सूचना दी गई है.

शेयर किए गए स्टोरेज को बड़े पैमाने पर ऐक्सेस करने से रोकने के लिए, Google Play Store ने अपनी नीति अपडेट की है. इससे, उन ऐप्लिकेशन का आकलन किया जा सकेगा जो Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करते हैं और MANAGE_EXTERNAL_STORAGE अनुमति की मदद से, सभी फ़ाइलों को ऐक्सेस करने का अनुरोध करते हैं. यह नीति, मई 2021 से लागू है.

जब आपका ऐप्लिकेशन Android 11 या उसके बाद के वर्शन को टारगेट करता है और उसमें MANAGE_EXTERNAL_STORAGE अनुमति का एलान किया जाता है, तो Android Studio, लिंट चेतावनी दिखाता है. यह चेतावनी, पहले चित्र में दिखाई गई है. यह चेतावनी आपको याद दिलाती है कि Google Play Store की एक नीति है, जो अनुमति के इस्तेमाल को सीमित करती है.

पहली इमेज. Android Studio में लिंट चेतावनी, जो डेवलपर को MANAGE_EXTERNAL_STORAGE अनुमति के लिए बनी Google Play की नीति के बारे में याद दिलाती है.

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

  • फ़ाइल मैनेजर
  • डेटा का बैक अप लेने और उसे वापस पाने की सुविधा देने वाले ऐप्लिकेशन
  • एंटी-वायरस वाले ऐप्लिकेशन
  • दस्तावेज़ मैनेज करने वाले ऐप्लिकेशन
  • डिवाइस पर फ़ाइल खोजना
  • डिस्क और फ़ाइल एन्क्रिप्ट (सुरक्षित) करने का तरीका
  • एक डिवाइस से दूसरे डिवाइस पर डेटा माइग्रेट करना