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

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

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

इन विकल्पों की खासियतों के बारे में, यहां दी गई टेबल में बताया गया है:

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

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

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



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

आपके लिए कौनसा विकल्प सही है, यह आपकी ज़रूरतों पर निर्भर करता है:

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

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

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

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

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

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

अन्य संसाधन

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

वीडियो