उपयोगकर्ताओं को उनकी फ़ाइलों पर ज़्यादा कंट्रोल देने और फ़ाइलों को व्यवस्थित रखने के लिए, Android 10 में ऐप्लिकेशन के लिए स्टोरेज का एक नया पैराडाइम पेश किया गया है. इसे स्कोप वाला स्टोरेज कहा जाता है. स्कोप वाले स्टोरेज में बदलाव डिवाइस के बाहरी स्टोरेज में ऐप्लिकेशन की फ़ाइलों को सेव और ऐक्सेस करने का तरीका. आपकी मदद करने के लिए अपने ऐप्लिकेशन को स्कोप वाले स्टोरेज की सुविधा देने के लिए माइग्रेट करें. आम तौर पर, Google Workspace for Education Plus इस गाइड में बताए गए, स्टोरेज के इस्तेमाल के उदाहरण. इस्तेमाल के उदाहरण, दो कैटगरी में बांटा गया है: मीडिया फ़ाइलों को मैनेज करना और मैनेज करना गैर-मीडिया फ़ाइलें.
कई मामलों में, आपका ऐप्लिकेशन ऐसी फ़ाइलें बनाता है जिन्हें अन्य ऐप्लिकेशन को ऐक्सेस करने की ज़रूरत नहीं होती या जिन्हें ऐक्सेस नहीं करना चाहिए. सिस्टम, ऐसी फ़ाइलों को मैनेज करने के लिए, ऐप्लिकेशन के हिसाब से स्टोरेज की जगहें उपलब्ध कराता है.
Android पर फ़ाइलें सेव करने और ऐक्सेस करने के तरीके के बारे में ज़्यादा जानने के लिए, स्टोरेज से जुड़ी ट्रेनिंग गाइड देखें.
मीडिया फ़ाइलें मैनेज करना
इस सेक्शन में, मीडिया फ़ाइलों (वीडियो, इमेज, और ऑडियो फ़ाइलों) को मैनेज करने के कुछ सामान्य इस्तेमाल के उदाहरणों के बारे में बताया गया है. साथ ही, इसमें उस हाई-लेवल के तरीके के बारे में बताया गया है जिसका इस्तेमाल आपका ऐप्लिकेशन कर सकता है. यहां दी गई टेबल में, इस्तेमाल के इन सभी उदाहरणों और लिंक के बारे में खास जानकारी दी गई है उन सेक्शन पर रीडायरेक्ट किया जा सकता है जिनमें ज़्यादा जानकारी शामिल है.
इस्तेमाल का उदाहरण | खास जानकारी |
---|---|
सभी इमेज या वीडियो फ़ाइलें दिखाएं | Android के सभी वर्शन के लिए, यही तरीका अपनाएं. |
किसी खास थीम से इमेज या वीडियो दिखाना फ़ोल्डर | Android के सभी वर्शन के लिए एक ही तरीका अपनाएं. |
इनसे जगह की जानकारी ऐक्सेस करें फ़ोटो | अगर आपका ऐप्लिकेशन, स्कोप किए गए स्टोरेज का इस्तेमाल करता है, तो इनमें से किसी एक तरीके का इस्तेमाल करें. किसी दूसरी इमेज का इस्तेमाल करें अगर आपका ऐप्लिकेशन स्कोप वाले स्टोरेज से ऑप्ट आउट करता है, तो यह तरीका अपनाएं. |
नए डाउनलोड के लिए, स्टोरेज की जगह तय करना | अगर आपका ऐप्लिकेशन, स्कोप किए गए स्टोरेज का इस्तेमाल करता है, तो इनमें से किसी एक तरीके का इस्तेमाल करें. किसी दूसरी इमेज का इस्तेमाल करें अगर आपका ऐप्लिकेशन, स्कोप वाले स्टोरेज से ऑप्ट आउट करता है, तो यह तरीका अपनाएं. |
उपयोगकर्ता की मीडिया फ़ाइलों को किसी डिवाइस पर एक्सपोर्ट करना | Android के सभी वर्शन के लिए एक ही तरीका अपनाएं. |
एक ही कार्रवाई में कई मीडिया फ़ाइलों में बदलाव करना या उन्हें मिटाना | Android 11 के लिए, एक तरीका अपनाएं. Android 10 के लिए, स्कोप वाले स्टोरेज से ऑप्ट आउट करें और इसके बजाय, Android 9 और उससे पहले के वर्शन के लिए इस्तेमाल किए जाने वाले तरीके का इस्तेमाल करें. |
पहले से मौजूद कोई एक इमेज इंपोर्ट करें मौजूद है | Android के सभी वर्शन के लिए यही तरीका अपनाएं. |
एक इमेज कैप्चर करना | Android के सभी वर्शन के लिए एक ही तरीका अपनाएं. |
दूसरे ऐप्लिकेशन के साथ मीडिया फ़ाइलें शेयर करना | Android के सभी वर्शन के लिए यही तरीका अपनाएं. |
किसी ऐप्लिकेशन के साथ मीडिया फ़ाइलें शेयर करना | Android के सभी वर्शन के लिए एक ही तरीका अपनाएं. |
डायरेक्ट फ़ाइल पाथ का इस्तेमाल करने वाले कोड या लाइब्रेरी से फ़ाइलें ऐक्सेस करना | Android 11 के लिए, एक तरीका अपनाएं. Android 10 के लिए, स्कोप से ऑप्ट आउट करें और Android 9 और इससे पहले के वर्शन के लिए, पुराने तरीके का इस्तेमाल करें. |
एक से ज़्यादा फ़ोल्डर में मौजूद इमेज या वीडियो फ़ाइलें दिखाना
query()
एपीआई का इस्तेमाल करके, किसी मीडिया कलेक्शन के बारे में क्वेरी करें. मीडिया फ़ाइलों को फ़िल्टर करने या क्रम से लगाने के लिए, projection
, selection
,
selectionArgs
, और sortOrder
पैरामीटर.
किसी फ़ोल्डर की इमेज या वीडियो दिखाना
इस तरीके का इस्तेमाल करें:
- ऐप्लिकेशन अनुमतियों का अनुरोध करें में बताए गए सबसे सही तरीके अपनाएं.
READ_EXTERNAL_STORAGE
के लिए अनुरोध करें अनुमति. - इनके मान के आधार पर मीडिया फ़ाइलें वापस पाएं
MediaColumns.DATA
, जिसमें डिस्क पर मीडिया आइटम का ऐब्सलूट फ़ाइल सिस्टम पाथ होता है.
ध्यान दें: किसी मौजूदा मीडिया फ़ाइल को ऐक्सेस करते समय, अपने लॉजिक में DATA
कॉलम की वैल्यू का इस्तेमाल किया जा सकता है. ऐसा इसलिए, क्योंकि इस वैल्यू का फ़ाइल पाथ मान्य है.
हालांकि, यह मत मानें कि फ़ाइल हमेशा उपलब्ध होती है. फ़ाइल के आधार पर होने वाली किसी भी I/O गड़बड़ी को मैनेज करने के लिए तैयार रहें.
दूसरी ओर, मीडिया फ़ाइल बनाने या अपडेट करने के लिए,
DATA
कॉलम का इस्तेमाल न करें. इसके बजाय, DISPLAY_NAME
और
RELATIVE_PATH
कॉलम.
फ़ोटो से जगह की जानकारी ऐक्सेस करना
अगर आपका ऐप्लिकेशन स्कोप वाले स्टोरेज का इस्तेमाल करता है, तो मीडिया स्टोरेज से जुड़ी गाइड के फ़ोटो में जगह की जानकारी सेक्शन में दिया गया तरीका अपनाएं.
नए डाउनलोड को सेव करने की जगह तय करें
अगर आपका ऐप्लिकेशन, स्कोप वाले स्टोरेज का इस्तेमाल करता है, तो ध्यान रखें कि आपको कौनसी जगह चुननी है डाउनलोड की गई मीडिया फ़ाइलों को सेव करने के लिए.
अगर दूसरे ऐप्लिकेशन को फ़ाइलें ऐक्सेस करने की ज़रूरत है, तो अच्छी तरह से तैयार मीडिया का इस्तेमाल करें कलेक्शन का इस्तेमाल करें.
Android 11 और उसके बाद के वर्शन पर, ऐप्लिकेशन के हिसाब से बनाई गई बाहरी डायरेक्ट्री में मौजूद फ़ाइलों को अन्य ऐप्लिकेशन ऐक्सेस नहीं कर सकते. भले ही, इन फ़ाइलों को फ़ेच करने के लिए DownloadManager
का इस्तेमाल किया जा रहा हो.
उपयोगकर्ता की मीडिया फ़ाइलों को किसी डिवाइस में एक्सपोर्ट करना
उपयोगकर्ता के मीडिया को सेव करने के लिए, सही डिफ़ॉल्ट जगह तय करें फ़ाइलें:
- उपयोगकर्ताओं को यह चुनने की अनुमति दें कि ऐप्लिकेशन के लिए खास तौर पर उपलब्ध स्टोरेज या शेयर किए गए स्टोरेज का इस्तेमाल करके, उनकी मीडिया फ़ाइलों को दूसरे ऐप्लिकेशन पढ़ सकते हैं या नहीं.
- उपयोगकर्ताओं को ऐप्लिकेशन के हिसाब से बनी डायरेक्ट्री से, ऐसी जगह पर फ़ाइलें एक्सपोर्ट करने की अनुमति दें जहां उन्हें आसानी से ऐक्सेस किया जा सके. मीडिया फ़ाइलों को डिवाइस की गैलरी में एक्सपोर्ट करने के लिए, MediaStore के इमेज, वीडियो, और ऑडियो कलेक्शन का इस्तेमाल करें.
एक ही कार्रवाई में कई मीडिया फ़ाइलों में बदलाव करें या उन्हें मिटाएं
उन Android वर्शन के आधार पर लॉजिक शामिल करें जिन पर आपका ऐप्लिकेशन काम करता है.
Android 11 पर चल रहा हो
इस तरीके का इस्तेमाल करें:
- इसका इस्तेमाल करके अपने ऐप्लिकेशन के लिखने या मिटाने के लिए, मंज़ूरी बाकी वाला इंटेंट बनाएं
MediaStore.createWriteRequest()
याMediaStore.createTrashRequest()
और फिर उसे चालू करके, उपयोगकर्ता से फ़ाइलों के सेट में बदलाव करने की अनुमति मांगें इंटेंट. उपयोगकर्ता के जवाब का आकलन करें:
- अगर अनुमति मिल गई है, तो बदलाव करें या मिटाएं कार्रवाई करें.
- अगर अनुमति नहीं दी गई है, तो उपयोगकर्ता को बताएं कि आपके ऐप्लिकेशन की सुविधा को अनुमति क्यों चाहिए.
Android 11 और उसके बाद के वर्शन पर उपलब्ध इन तरीकों का इस्तेमाल करके, मीडिया फ़ाइलों के ग्रुप मैनेज करने के बारे में ज़्यादा जानें.
Android 10 पर चल रहा हो
अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) को टारगेट करता है, तो स्कोप किए गए स्टोरेज से ऑप्ट-आउट करें. साथ ही, इस कार्रवाई को करने के लिए, Android 9 और उससे पहले के वर्शन के लिए इस्तेमाल किए जाने वाले तरीके का इस्तेमाल जारी रखें.
Android 9 या इससे पहले के वर्शन पर चल रहा है
इस तरीके का इस्तेमाल करें:
- ऐप्लिकेशन की अनुमतियों का अनुरोध करें में बताए गए सबसे सही तरीकों का पालन करके,
WRITE_EXTERNAL_STORAGE
की अनुमति का अनुरोध करें. - मीडिया फ़ाइलों में बदलाव करने या उन्हें मिटाने के लिए,
MediaStore
एपीआई का इस्तेमाल करें.
पहले से मौजूद एक इमेज इंपोर्ट करें
अगर आपको पहले से मौजूद किसी इमेज को इंपोर्ट करना है, तो आपका ऐप्लिकेशन इस काम के लिए अपने यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल कर सकता है. इसके अलावा, वह सिस्टम पिकर का भी इस्तेमाल कर सकता है. उदाहरण के लिए, उपयोगकर्ता की प्रोफ़ाइल फ़ोटो के तौर पर इस्तेमाल करने के लिए.
अपना यूज़र इंटरफ़ेस दिखाएं
इस तरीके का इस्तेमाल करें:
- ऐप्लिकेशन की अनुमतियों का अनुरोध करें में बताए गए सबसे सही तरीकों का पालन करके,
READ_EXTERNAL_STORAGE
की अनुमति का अनुरोध करें. - मीडिया कलेक्शन के बारे में क्वेरी करने के लिए,
query()
एपीआई का इस्तेमाल करें. - नतीजों को अपने ऐप्लिकेशन के पसंद के मुताबिक बनाए गए यूज़र इंटरफ़ेस (यूआई) में दिखाएं.
सिस्टम पिकर का इस्तेमाल करना
ACTION_GET_CONTENT
का इस्तेमाल करें
इंटेंट, जो उपयोगकर्ता को इंपोर्ट करने के लिए कोई इमेज चुनने के लिए कहता है.
अगर आपको सिस्टम पिकर में दिखने वाली इमेज को फ़िल्टर करना है, तो setType()
या EXTRA_MIME_TYPES
का इस्तेमाल करें.
कोई एक इमेज कैप्चर करें
अगर आपको अपने ऐप्लिकेशन में इस्तेमाल करने के लिए एक इमेज कैप्चर करनी है, तो उपयोगकर्ता से डिवाइस के कैमरे का इस्तेमाल करके फ़ोटो लेने के लिए कहें. उदाहरण के लिए, उपयोगकर्ता की प्रोफ़ाइल फ़ोटो के तौर पर इस्तेमाल करने के लिए. इसके लिए, ACTION_IMAGE_CAPTURE
इंटेंट का इस्तेमाल करें. सिस्टम
कैप्चर की गई फ़ोटो को इसमें सेव करता है
MediaStore.Images
टेबल.
अन्य ऐप्लिकेशन के साथ मीडिया फ़ाइलें शेयर करना
सीधे MediaStore में रिकॉर्ड जोड़ने के लिए, insert()
वाला तरीका अपनाएं. ज़्यादा जानकारी के लिए, मीडिया स्टोरेज से जुड़ी गाइड में आइटम जोड़ें सेक्शन देखें.
किसी ऐप्लिकेशन के साथ मीडिया फ़ाइलें शेयर करना
Android FileProvider
कॉम्पोनेंट का इस्तेमाल, फ़ाइल सेट अप करने के तरीके में बताए गए तरीके से करें
शेयर करने से जुड़ी गाइड.
सीधे फ़ाइल पाथ का इस्तेमाल करने वाले कोड या लाइब्रेरी से फ़ाइलें ऐक्सेस करना
उन Android वर्शन के आधार पर लॉजिक शामिल करें जिन पर आपका ऐप्लिकेशन काम करता है.
Android 11 पर चल रहा हो
इस तरीके का इस्तेमाल करें:
- ऐप्लिकेशन अनुमतियों का अनुरोध करें में बताए गए सबसे सही तरीके अपनाएं.
READ_EXTERNAL_STORAGE
के लिए अनुरोध करें अनुमति. - फ़ाइलों को सीधे फ़ाइल पाथ का इस्तेमाल करके ऐक्सेस करें.
ज़्यादा जानकारी के लिए, लिंक का इस्तेमाल करके मीडिया फ़ाइलें खोलने का तरीका बताने वाला सेक्शन देखें डायरेक्ट फ़ाइल पाथ का इस्तेमाल करना चाहिए.
Android 10 पर चल रहा हो
अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) को टारगेट करता है, तो स्कोप किए गए स्टोरेज से ऑप्ट-आउट करें. साथ ही, इस कार्रवाई को करने के लिए, Android 9 और उससे पहले के वर्शन के लिए इस्तेमाल किए जाने वाले तरीके का इस्तेमाल जारी रखें.
Android 9 या इससे पहले के वर्शन पर काम करता हो
इस तरीके का इस्तेमाल करें:
- ऐप्लिकेशन अनुमतियों का अनुरोध करें में बताए गए सबसे सही तरीके अपनाएं.
WRITE_EXTERNAL_STORAGE
के लिए अनुरोध करें अनुमति. - डायरेक्ट फ़ाइल पाथ का इस्तेमाल करके, फ़ाइलें ऐक्सेस करें.
मीडिया फ़ाइलों के अलावा अन्य फ़ाइलों को मैनेज करना
इस सेक्शन में, मीडिया फ़ाइलों के अलावा अन्य फ़ाइलों को मैनेज करने के कुछ सामान्य उदाहरणों के बारे में बताया गया है. साथ ही, उस हाई-लेवल के तरीके के बारे में भी बताया गया है जिसका इस्तेमाल आपका ऐप्लिकेशन कर सकता है. नीचे दी गई टेबल इनमें से हर इस्तेमाल के उदाहरण की खास जानकारी देता है और हर उस सेक्शन के लिंक देता है अतिरिक्त जानकारी शामिल करें.
इस्तेमाल का उदाहरण | खास जानकारी |
---|---|
दस्तावेज़ फ़ाइल खोलना | Android के सभी वर्शन के लिए एक ही तरीका अपनाएं. |
फ़ाइलों को इन पर लिखें दूसरे स्टोरेज वॉल्यूम | Android 11 के लिए, एक तरीका इस्तेमाल करें. Android के पुराने वर्शन के लिए, किसी दूसरे तरीके का इस्तेमाल करें. |
मौजूदा फ़ाइलों को किसी लेगसी स्टोरेज से | जब भी हो सके, अपनी फ़ाइलों को स्कोप वाले स्टोरेज में माइग्रेट करें. ज़रूरत पड़ने पर, Android 10 के लिए सीमित स्टोरेज से ऑप्ट आउट करें. |
अन्य लोगों के साथ कॉन्टेंट शेयर करना ऐप्लिकेशन | Android के सभी वर्शन के लिए यही तरीका अपनाएं. |
बिना मीडिया वाली फ़ाइलों को कैश मेमोरी में सेव करना | Android के सभी वर्शन के लिए, यही तरीका अपनाएं. |
किसी डिवाइस पर नॉन-मीडिया फ़ाइलें एक्सपोर्ट करना | अगर आपका ऐप्लिकेशन, स्कोप किए गए स्टोरेज का इस्तेमाल करता है, तो इनमें से किसी एक तरीके का इस्तेमाल करें. किसी दूसरे प्रॉडक्ट का इस्तेमाल करें अगर आपका ऐप्लिकेशन स्कोप वाले स्टोरेज से ऑप्ट आउट करता है, तो यह तरीका अपनाएं. |
दस्तावेज़ फ़ाइल खोलें
ACTION_OPEN_DOCUMENT
का इस्तेमाल करें
यह उपयोगकर्ता से सिस्टम पिकर की मदद से खोलने के लिए, एक फ़ाइल चुनने के लिए कहने की कोशिश करता है. अगर आपको उन फ़ाइलों को फ़िल्टर करना है जिन्हें सिस्टम पिकर, उपयोगकर्ता को चुनने के लिए दिखाएगा, तो setType()
या EXTRA_MIME_TYPES
का इस्तेमाल करें.
उदाहरण के लिए, सभी PDF, ODT, और TXT फ़ाइलें ढूंढने के लिए, इनका इस्तेमाल करें कोड:
startActivityForResult( Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "*/*" putExtra(Intent.EXTRA_MIME_TYPES, arrayOf( "application/pdf", // .pdf "application/vnd.oasis.opendocument.text", // .odt "text/plain" // .txt )) }, REQUEST_CODE )
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] { "application/pdf", // .pdf "application/vnd.oasis.opendocument.text", // .odt "text/plain" // .txt }); startActivityForResult(intent, REQUEST_CODE);
सेकंडरी स्टोरेज वॉल्यूम में फ़ाइलों में बदलाव करना
सेकंडरी स्टोरेज वॉल्यूम में एसडी कार्ड शामिल होते हैं. यहां दी गई किसी भी जानकारी को ऐक्सेस करने के लिए,
इसका इस्तेमाल करके, तय किया गया स्टोरेज
StorageVolume
क्लास.
अपने ऐप्लिकेशन के Android वर्शन के हिसाब से लॉजिक शामिल करें.
यह सुविधा Android 11 पर काम करती है
इस तरीके का इस्तेमाल करें:
- स्कोप वाले स्टोरेज मॉडल का इस्तेमाल करें.
- Android 10 (एपीआई लेवल 29) या इससे पहले के वर्शन को टारगेट करें.
- घोषणा करें
WRITE_EXTERNAL_STORAGE
अनुमति. - इनमें से कोई एक तरीका अपनाएं:
MediaStore
एपीआई का इस्तेमाल करके फ़ाइल ऐक्सेस करना.File
याfopen()
जैसे एपीआई का इस्तेमाल करके, फ़ाइल का डायरेक्ट पाथ ऐक्सेस करना.
पुराने वर्शन पर चल रहा है
स्टोरेज के ऐक्सेस का इस्तेमाल करें फ़्रेमवर्क, जिसकी मदद से लोग ये काम कर सकते हैं सेकंडरी स्टोरेज वॉल्यूम में वह जगह चुनें जहां आपका ऐप्लिकेशन फ़ाइल से लिए जाते हैं.
लेगसी स्टोरेज लोकेशन से मौजूदा फ़ाइलों को माइग्रेट करने की सुविधा
किसी डायरेक्ट्री को स्टोरेज की लेगसी लोकेशन माना जाता है, अगर वह: ऐप्लिकेशन की खास डायरेक्ट्री या सार्वजनिक तौर पर शेयर की गई डायरेक्ट्री. अगर आपका ऐप्लिकेशन, लेगसी स्टोरेज लोकेशन में फ़ाइलों का इस्तेमाल करता है, तो हमारा सुझाव है कि आप ऐप्लिकेशन की उन जगहों पर फ़ाइलें सेव करना जिन्हें ऐक्सेस करने के लिए, स्कोप वाले स्टोरेज का इस्तेमाल किया जाता है. स्कोप वाले स्टोरेज में मौजूद फ़ाइलों के साथ काम करने के लिए, ऐप्लिकेशन में ज़रूरी बदलाव करना.
डेटा माइग्रेशन के लिए, स्टोरेज की लेगसी जगह का ऐक्सेस बनाए रखना
आपके ऐप्लिकेशन को लेगसी स्टोरेज की जगह का ऐक्सेस बनाए रखना होगा, ताकि ऐप्लिकेशन की किसी भी फ़ाइल को उन जगहों पर माइग्रेट किया जा सके जिन्हें स्कोप वाले स्टोरेज से ऐक्सेस किया जा सकता है. कॉन्टेंट बनाने आपको कौनसा तरीका इस्तेमाल करना चाहिए, यह आपके ऐप्लिकेशन के टारगेट एपीआई लेवल पर निर्भर करता है.
अगर आपका ऐप्लिकेशन Android 11 को टारगेट करता है
सेट करें
preserveLegacyExternalStorage
लेगसी स्टोरेज को बनाए रखने के लिए,true
पर फ़्लैग करें मॉडल ने कि आपका ऐप्लिकेशन उपयोगकर्ता का डेटा माइग्रेट कर सके, जब वह उपयोगकर्ता के डेटा को नए वर्शन में अपग्रेड करे Android 11 को टारगेट करने वाला आपका ऐप्लिकेशन.स्कोप वाले स्टोरेज से ऑप्ट आउट करना जारी रखें, ताकि तो आपका ऐप्लिकेशन, लेगसी स्टोरेज लोकेशन में आपकी फ़ाइलों को ऐक्सेस करना जारी रख सकता है Android 10 वाले डिवाइस.
अगर आपका ऐप्लिकेशन Android 10 को टारगेट करता है
इन कामों को आसान बनाने के लिए, डिवाइस के स्कोप वाले स्टोरेज से ऑप्ट आउट करें सभी Android वर्शन पर अपने ऐप्लिकेशन के काम करने के तरीके को बनाए रख सकता है.
ऐप्लिकेशन का डेटा माइग्रेट करना
जब आपका ऐप्लिकेशन माइग्रेट करने के लिए तैयार हो, तो यह तरीका अपनाएं:
- Android 10 या इससे पहले के वर्शन को टारगेट करें.
- दायरे वाले स्टोरेज से ऑप्ट आउट करना आपके ऐप्लिकेशन के पास उन फ़ाइलों का ऐक्सेस है जिन्हें आपको माइग्रेट करना है.
-
File
एपीआई का इस्तेमाल करके, फ़ाइलों को/sdcard/
में मौजूद उनकी मौजूदा जगह से, ऐसी जगह पर ले जाने के लिए कोड डिप्लॉय करें जहां उन्हें स्कोप वाले स्टोरेज से ऐक्सेस किया जा सके:- ऐप्लिकेशन की निजी फ़ाइलों को उस डायरेक्ट्री में ले जाएं जो
getExternalFilesDir()
के तरीके से मिलती है. - शेयर की गई ऐसी फ़ाइलों को
Downloads/
डायरेक्ट्री की, ऐप्लिकेशन के लिए बनाई गई सबडायरेक्ट्री में ले जाएं जो मीडिया फ़ाइलें नहीं हैं.
- ऐप्लिकेशन की निजी फ़ाइलों को उस डायरेक्ट्री में ले जाएं जो
- अपने ऐप्लिकेशन की लेगसी स्टोरेज डायरेक्ट्री को,
/sdcard/
डायरेक्ट्री.
जब उपयोगकर्ता आपके ऐप्लिकेशन का नया वर्शन इंस्टॉल करते हैं, तब वे डेटा को पूरा करते हैं माइग्रेशन प्रोसेस पूरी कर ली जाएगी. आप इनकी माइग्रेशन प्रक्रिया की निगरानी कर सकते हैं Analytics इवेंट बनाकर अपने उपयोगकर्ता आधार को बेहतर बनाएं.
उपयोगकर्ताओं के डेटा को माइग्रेट करने के बाद, अपने ऐप्लिकेशन में एक और अपडेट पब्लिश करें. इसमें, Android 11 को टारगेट करें.
अन्य ऐप्लिकेशन के साथ कॉन्टेंट शेयर करना
अपने ऐप्लिकेशन की फ़ाइलें किसी अन्य ऐप्लिकेशन के साथ शेयर करने के लिए, किसी
FileProvider
. ऐसे ऐप्लिकेशन के लिए जिन्हें शेयर करना ज़रूरी है
फ़ाइलों को एक-दूसरे से कनेक्ट करने की कोशिश करते हैं, तो हमारा सुझाव है कि आप कॉन्टेंट ऐक्सेस करने के लिए
प्रोवाइडर की मदद से, और
फिर संग्रह में ऐप्लिकेशन जोड़ते समय डेटा को सिंक करना.
गैर-मीडिया फ़ाइलों को कैश मेमोरी में सेव करें
आपको किस तरीके का इस्तेमाल करना चाहिए, यह इस बात पर निर्भर करता है कि आपको किन फ़ाइलों को कैश मेमोरी में सेव करना है.
- ऐसी छोटी फ़ाइलें या फ़ाइलें जिनमें संवेदनशील जानकारी होती है:
Context#getCacheDir()
. - बड़ी फ़ाइलें या ऐसी फ़ाइलें जिनमें संवेदनशील जानकारी शामिल नहीं है:
Context#getExternalCacheDir()
का इस्तेमाल करें.
किसी डिवाइस पर गैर-मीडिया फ़ाइलें एक्सपोर्ट करना
मीडिया से जुड़ी फ़ाइलों को सेव करने के लिए, कोई सही डिफ़ॉल्ट जगह तय करें. उपयोगकर्ताओं को ऐप्लिकेशन के हिसाब से बनाई गई डायरेक्ट्री से, ऐसी जगह पर फ़ाइलें एक्सपोर्ट करने की अनुमति दें जहां उन्हें आसानी से ऐक्सेस किया जा सके. डिवाइस पर मीडिया फ़ाइलों के अलावा अन्य फ़ाइलें एक्सपोर्ट करने के लिए, MediaStore के डाउनलोड या दस्तावेज़ कलेक्शन का इस्तेमाल करें.
ऐप्लिकेशन के हिसाब से फ़ाइलें मैनेज करना
अगर आपका ऐप्लिकेशन ऐसी फ़ाइलें बनाता है जिन्हें दूसरे ऐप्लिकेशन को ऐक्सेस करने की ज़रूरत नहीं होती या को ऐक्सेस नहीं करना चाहिए, तो आप इन फ़ाइलों को ऐप्लिकेशन के लिए खास तौर पर बनाए गए स्टोरेज की जगहें.
डिवाइस के स्टोरेज की डायरेक्ट्री
सिस्टम, दूसरे ऐप्लिकेशन को इन जगहों की जानकारी ऐक्सेस करने से रोकता है और Android 10 (एपीआई लेवल 29) और उसके बाद वाले वर्शन पर, इन जगहों की जानकारी एन्क्रिप्ट (सुरक्षित) की जाती है. ये जगहें, संवेदनशील डेटा को सेव करने के लिए अच्छी जगहें हैं. इस डेटा को सिर्फ़ आपका ऐप्लिकेशन ऐक्सेस कर सकता है.
बाहरी स्टोरेज डायरेक्ट्री
अगर डिवाइस के स्टोरेज में ऐप्लिकेशन की खास फ़ाइलें सेव करने के लिए ज़रूरी जगह नहीं है, तो इसके बजाय, बाहरी स्टोरेज का इस्तेमाल करें. अगर किसी ऐप्लिकेशन के पास ज़रूरी अनुमतियां हैं, तो वह इन डायरेक्ट्री को ऐक्सेस कर सकता है. हालांकि, इन डायरेक्ट्री में सेव की गई फ़ाइलों का इस्तेमाल सिर्फ़ आपके ऐप्लिकेशन के लिए किया जा सकता है.
Android 4.4 (एपीआई लेवल 19) या इसके बाद के वर्शन पर, आपके ऐप्लिकेशन को बाहरी स्टोरेज में ऐप्लिकेशन की खास डायरेक्ट्री ऐक्सेस करने के लिए, स्टोरेज से जुड़ी अनुमतियां स्टोरेज.
जब उपयोगकर्ता आपके ऐप्लिकेशन को अनइंस्टॉल करता है, तो ऐप्लिकेशन के लिए बने स्टोरेज में सेव की गई फ़ाइलें हटा दी जाती हैं. इसलिए, आपको इस स्टोरेज का इस्तेमाल ऐसी किसी भी चीज़ को सेव करने के लिए नहीं करना चाहिए जिसे उपयोगकर्ता आपके ऐप्लिकेशन के बिना भी इस्तेमाल करना चाहता हो.
स्कोप वाले स्टोरेज से कुछ समय के लिए ऑप्ट-आउट करना
इससे पहले कि आपका ऐप्लिकेशन, स्कोप वाले स्टोरेज के साथ पूरी तरह काम करे, कुछ समय के लिए ऑप्ट आउट करें आपके टेस्ट और प्रोडक्शन में ऐप का इस्तेमाल करें.
अपने टेस्ट से ऑप्ट आउट करना
Android 10 (एपीआई लेवल 29) और उसके बाद वाले वर्शन पर, आपके ऐप्लिकेशन के टेस्ट स्टोरेज में चलते हैं डिफ़ॉल्ट रूप से सैंडबॉक्स करता है. यह सैंडबॉक्स आपके ऐप्लिकेशन को, Google के बाहर की फ़ाइलों को ऐक्सेस करने से रोकता है और सार्वजनिक तौर पर शेयर की गई डायरेक्ट्री शामिल होंगी.
अगर टेस्ट में होस्ट के लिए फ़ाइलें दिखती हैं, जैसे कि स्क्रीनशॉट, डीबग करने का डेटा,
या परफ़ॉर्मेंस मेट्रिक—इन फ़ाइलों को दुनिया भर के
डायरेक्ट्री में जा सकते हैं. ऐसा करने के लिए, नीचे दिए गए फ़्लैग को
am instrument
को शुरू करता है:
-e no-isolated-storage 1
यह फ़्लैग, इंस्ट्रुमेंट किए गए टेस्ट केस के सभी व्यवहार पर असर डालता है और सभी पर असर डालता है
शुरू किया गया टेस्ट कोड. इसलिए, इस फ़्लैग का इस्तेमाल करने पर, इस बात की पुष्टि नहीं की जा सकती कि
स्कोप वाले स्टोरेज के साथ ऐप्लिकेशन के काम करने की सुविधा. टेस्ट आउटपुट के लिए, ऐप्लिकेशन के स्कोप वाले स्टोरेज में लिखना बेहतर होता है, जिसे शेल पढ़ सकता है. इसके बाद, उसे
ऐप्लिकेशन के स्कोप वाली डायरेक्ट्री. यह तय करने के लिए कि किस डायरेक्ट्री से डेटा लेना है, getExternalMediaDirs()
को कॉल करें.
अपने प्रोडक्शन ऐप्लिकेशन में ऑप्ट आउट करना
अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या उससे पहले के वर्शन को टारगेट करता है, तो अपने प्रोडक्शन ऐप्लिकेशन में स्कोप वाले स्टोरेज से कुछ समय के लिए ऑप्ट आउट किया जा सकता है. हालांकि, अगर आपने Android 10 को टारगेट किया है, तो आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में requestLegacyExternalStorage
की वैल्यू को true
पर सेट करना होगा:
<manifest ... > <!-- This attribute is "false" by default on apps targeting Android 10. --> <application android:requestLegacyExternalStorage="true" ... > ... </application> </manifest>
यह जांच करने के लिए कि Android 10 या उससे पहले के वर्शन को टारगेट करने वाला ऐप्लिकेशन, कब काम करता है
स्कोप वाले स्टोरेज का इस्तेमाल करके, इस व्यवहार के लिए ऑप्ट इन किया जा सकता है. इसके लिए,
false
के लिए requestLegacyExternalStorage
. अगर किसी ऐसे डिवाइस पर टेस्ट किया जा रहा है
Android 11 पर चलता है, तो ऐप्लिकेशन के साथ काम करने की सुविधा का इस्तेमाल करके
फ़्लैग का इस्तेमाल करके
डिवाइस के स्कोप वाले स्टोरेज के साथ या इसके बिना, ऐप्लिकेशन के काम करने का तरीका जानने के लिए.
अन्य संसाधन
Android डिवाइस के स्टोरेज के बारे में ज़्यादा जानने के लिए, ये लेख पढ़ें: