डेटा और फ़ाइल स्टोरेज की खास जानकारी

Android, एक ऐसे फ़ाइल सिस्टम का इस्तेमाल करता है जो अन्य फ़ाइलों में, डिस्क-आधारित फ़ाइल सिस्टम से मेल खाता है प्लैटफ़ॉर्म. आपके ऐप्लिकेशन का डेटा सेव करने के लिए, सिस्टम आपको कई विकल्प देता है:

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

इन विकल्पों की विशेषताओं के बारे में नीचे दी गई टेबल में बताया गया है:

कॉन्टेंट किस तरह का है ऐक्सेस करने का तरीका अनुमतियां ज़रूरी हैं क्या दूसरे ऐप्लिकेशन ऐक्सेस कर सकते हैं? ऐप्लिकेशन अनइंस्टॉल करने पर फ़ाइलें हटाई गईं?
ऐप्लिकेशन के हिसाब से फ़ाइलें सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनी फ़ाइलें डिवाइस के स्टोरेज से, getFilesDir() या getCacheDir()

बाहरी स्टोरेज से, getExternalFilesDir() या getExternalCacheDir()
डिवाइस के स्टोरेज के लिए कभी भी ज़रूरी नहीं है

बाहरी स्टोरेज के लिए ज़रूरत नहीं है जब आपके ऐप्लिकेशन का इस्तेमाल Android 4.4 (एपीआई लेवल 19) वाले डिवाइसों पर किया जाता है, तब डिवाइस का स्टोरेज या उससे ज़्यादा
नहीं हां
मीडिया शेयर की जा सकने वाली मीडिया फ़ाइलें (इमेज, ऑडियो फ़ाइलें, वीडियो) MediaStore एपीआई दूसरे ऐप्लिकेशन ऐक्सेस करते समय READ_EXTERNAL_STORAGE फ़ाइलें चालू हैं Android 11 (एपीआई लेवल 30) या उसके बाद वाला वर्शन

READ_EXTERNAL_STORAGE या WRITE_EXTERNAL_STORAGE अन्य ऐप्लिकेशन ऐक्सेस करते समय Android 10 (एपीआई लेवल 29)

पर मौजूद फ़ाइलें Android 9 (एपीआई लेवल 28) पर काम करने वाली सभी फ़ाइलों के लिए अनुमतियां ज़रूरी हैं या कम
हां, हालांकि दूसरे ऐप्लिकेशन को READ_EXTERNAL_STORAGE की ज़रूरत है अनुमति नहीं
दस्तावेज़ और अन्य फ़ाइलें शेयर किया जा सकने वाला अन्य तरह का कॉन्टेंट, जिसमें डाउनलोड की गई फ़ाइलें भी शामिल हैं स्टोरेज ऐक्सेस फ़्रेमवर्क कोई नहीं हां, सिस्टम फ़ाइल पिकर की मदद से नहीं
ऐप्लिकेशन प्राथमिकताएं की-वैल्यू पेयर Jetpack Preferences लाइब्रेरी कोई नहीं नहीं हां
डेटाबेस स्ट्रक्चर्ड डेटा Room परसिस्टेंस लाइब्रेरी कोई नहीं नहीं हां

जो समाधान चुना जाता है वह आपकी खास ज़रूरतों पर निर्भर करता है:

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

स्टोरेज की जगहों की कैटगरी

Android दो तरह का स्टोरेज उपलब्ध कराता है: डिवाइस का स्टोरेज और बाहरी स्टोरेज. ज़्यादातर डिवाइसों में, डिवाइस का स्टोरेज, बाहरी स्टोरेज से कम होता है. हालांकि, आंतरिक मेमोरी सभी डिवाइस पर हमेशा उपलब्ध रहता है, जिससे यह आपके ऐप्लिकेशन पर निर्भर डेटा डालने के लिए, ज़्यादा भरोसेमंद जगह.

हटाए जा सकने वाले वॉल्यूम, जैसे कि एसडी कार्ड, फ़ाइल सिस्टम में बाहरी स्टोरेज के हिस्से के तौर पर दिखते हैं. Android इन डिवाइसों को पाथ का इस्तेमाल करके दिखाता है, जैसे /sdcard.

ऐप्लिकेशन डिफ़ॉल्ट रूप से डिवाइस के स्टोरेज में सेव होते हैं. अगर आपके APK का साइज़ बहुत बड़ा है, तो अपने ऐप्लिकेशन को बाहरी स्टोरेज पर इंस्टॉल करने के लिए, ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में प्राथमिकता दी जा सकती है:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

बाहरी स्टोरेज की अनुमतियां और ऐक्सेस

Android, स्टोरेज से जुड़ी इन अनुमतियों को तय करता है: READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE, और MANAGE_EXTERNAL_STORAGE.

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

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

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

डिवाइस का स्कोप किया गया स्टोरेज

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

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

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

किसी डिवाइस पर फ़ाइलें देखना

किसी डिवाइस पर सेव की गई फ़ाइलें देखने के लिए, Android Studio के डिवाइस फ़ाइल एक्सप्लोरर का इस्तेमाल करें.

अन्य संसाधन

डेटा स्टोरेज के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें.

वीडियो