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

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

  • USB on-the-go (OTG) ड्राइव और SD कार्ड, दोनों की रूट डायरेक्ट्री का ऐक्सेस.

  • /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 अनुमति का अनुरोध सिर्फ़ तब करें, जब आपका ऐप्लिकेशन, निजता को बनाए रखने वाले एपीआई का सही ढंग से इस्तेमाल न कर पा रहा हो. जैसे, स्टोरेज को ऐक्सेस करने का फ़्रेमवर्क या MediaStore API. आपके ऐप्लिकेशन को मिली अनुमति का इस्तेमाल, उन मामलों में ही करना चाहिए जिनके लिए मंज़ूरी मिली हुई है. साथ ही, ये इस्तेमाल ऐप्लिकेशन के मुख्य फ़ंक्शन से सीधे जुड़े होने चाहिए. अगर आपके ऐप्लिकेशन में, यहां बताए गए किसी भी मामले से मिलता-जुलता इस्तेमाल का उदाहरण शामिल है, तो हो सकता है कि वह MANAGE_EXTERNAL_STORAGE अनुमति का अनुरोध कर सके:

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