शेयर किए गए स्टोरेज को ऐक्सेस करने की अनुमति मांगने वाले ज़्यादातर ऐप्लिकेशन, मीडिया फ़ाइलें और मीडिया के अलावा अन्य फ़ाइलें शेयर करने के सबसे सही तरीकों का पालन कर सकते हैं. हालांकि, कुछ ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए, डिवाइस पर मौजूद फ़ाइलों को ऐक्सेस करने की अनुमति की ज़रूरत होती है. हालांकि, निजता को बनाए रखने वाले स्टोरेज के सबसे सही तरीकों का इस्तेमाल करके, इन ऐप्लिकेशन को फ़ाइलें ऐक्सेस करने में परेशानी होती है. ऐसी स्थितियों के लिए, Android सभी फ़ाइलों को ऐक्सेस करने की अनुमति देता है.
उदाहरण के लिए, एंटी-वायरस ऐप्लिकेशन के मुख्य फ़ंक्शन के लिए, अलग-अलग डायरेक्ट्री में मौजूद कई फ़ाइलों को नियमित तौर पर स्कैन करने की ज़रूरत पड़ सकती है. अगर इस स्कैनिंग के लिए, सिस्टम के फ़ाइल पिकर का इस्तेमाल करके डायरेक्ट्री चुनने के लिए, उपयोगकर्ता को बार-बार इंटरैक्ट करना पड़ता है, तो इससे उपयोगकर्ता को खराब अनुभव मिलता है. अन्य इस्तेमाल के उदाहरणों—जैसे कि फ़ाइल मैनेजर ऐप्लिकेशन, बैक अप लेने और पहले जैसा करने की सुविधा देने वाले ऐप्लिकेशन, और दस्तावेज़ मैनेज करने वाले ऐप्लिकेशन—के लिए भी इसी तरह के पहलुओं पर ध्यान देना ज़रूरी है.
सभी फ़ाइलों को ऐक्सेस करने की अनुमति का अनुरोध करना
कोई ऐप्लिकेशन, उपयोगकर्ता से सभी फ़ाइलों को ऐक्सेस करने की अनुमति का अनुरोध इन तरीकों से कर सकता है:
- मेनिफ़ेस्ट में
MANAGE_EXTERNAL_STORAGEअनुमति का एलान करना. -
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSIONइंटेंट ऐक्शन का इस्तेमाल करके, उपयोगकर्ताओं को सिस्टम सेटिंग के उस पेज पर भेजना जहां वे आपके ऐप्लिकेशन के लिए यह विकल्प चालू कर सकते हैं: सभी फ़ाइलों को मैनेज करने का ऐक्सेस दें.
यह जानने के लिए कि आपके ऐप्लिकेशन को MANAGE_EXTERNAL_STORAGE
अनुमति मिली है या नहीं, Environment.isExternalStorageManager() को कॉल करें.
MANAGE_EXTERNAL_STORAGE अनुमति से किए जा सकने वाले काम
MANAGE_EXTERNAL_STORAGE अनुमति से ये काम किए जा सकते हैं:
शेयर किए गए स्टोरेज में मौजूद सभी फ़ाइलों को पढ़ने और उनमें बदलाव करने का ऐक्सेस.
MediaStore.Filesटेबल के कॉन्टेंट का ऐक्सेस.USB ऑन-द-गो (OTG) ड्राइव और SD कार्ड, दोनों की रूट डायरेक्ट्री का ऐक्सेस.
इंटरनल स्टोरेज की सभी डायरेक्ट्री में बदलाव करने का ऐक्सेस. हालांकि,
/Android/data/,/sdcard/Android, और/sdcard/Androidकी ज़्यादातर सबडायरेक्ट्री में बदलाव नहीं किया जा सकता. बदलाव करने के इस ऐक्सेस में, फ़ाइल के पाथ को सीधे तौर पर ऐक्सेस करने की सुविधा शामिल है.
जब किसी ऐप्लिकेशन के पास MANAGE_EXTERNAL_STORAGE अनुमति होती है, तो वह इन
अतिरिक्त फ़ाइलों और डायरेक्ट्री को MediaStore API या फ़ाइल के पाथ को सीधे तौर पर ऐक्सेस करके
ऐक्सेस कर सकता है. हालांकि, स्टोरेज को ऐक्सेस करने के फ़्रेमवर्क का इस्तेमाल करने पर, किसी फ़ाइल या डायरेक्ट्री को सिर्फ़ तब ऐक्सेस किया जा सकता है, जब 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, Lint की वह चेतावनी दिखाता है जो पहली इमेज में दिखती है. इस चेतावनी से आपको याद दिलाया जाता है कि Google Play Store की एक नीति है, जिसके तहत इस अनुमति के इस्तेमाल को सीमित किया जाता है.
MANAGE_EXTERNAL_STORAGE
अनुमति के बारे में याद दिलाती है.
MANAGE_EXTERNAL_STORAGE अनुमति का अनुरोध सिर्फ़ तब करें, जब आपका ऐप्लिकेशन
निजता को बनाए रखने वाले बेहतर एपीआई का सही ढंग से इस्तेमाल न कर पाए. जैसे, स्टोरेज
को ऐक्सेस करने का फ़्रेमवर्क या Media
Store API. ऐप्लिकेशन को मिली अनुमति का इस्तेमाल, उन मामलों में ही करना चाहिए जिनके लिए मंज़ूरी मिली हुई है. साथ ही, ये इस्तेमाल ऐप्लिकेशन के मुख्य फ़ंक्शन से सीधे जुड़े होने चाहिए. अगर आपके ऐप्लिकेशन में, यहां बताए गए किसी भी इस्तेमाल के उदाहरण जैसा कोई इस्तेमाल का उदाहरण शामिल है, तो हो सकता है कि वह MANAGE_EXTERNAL_STORAGE अनुमति का अनुरोध कर सके:
- फ़ाइल मैनेजर
- डेटा का बैक अप लेने और उसे वापस पाने की सुविधा देने वाले ऐप्लिकेशन
- एंटी-वायरस वाले ऐप्लिकेशन
- दस्तावेज़ मैनेज करने वाले ऐप्लिकेशन
- डिवाइस पर मौजूद फ़ाइलों को खोजना
- डिस्क और फ़ाइल को एन्क्रिप्ट (सुरक्षित) करना
- डिवाइस-टू-डिवाइस डेटा माइग्रेशन