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

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

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

  • डिवाइस के स्टोरेज की सभी डायरेक्ट्री में डेटा लिखने का ऐक्सेस. हालांकि, /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, if the app with the specified package name doesn't define a "manage space" activity.

जांच के लिए 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, लिंट की चेतावनी दिखाता है. यह चेतावनी, इमेज 1 में दिखती है. इस चेतावनी से आपको याद दिलाया जाता है कि Google Play Store की एक नीति है. इसके तहत, अनुमति के इस्तेमाल को सीमित किया जाता है.

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

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

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