Android, वह फ़ाइल सिस्टम इस्तेमाल करता है जो अन्य प्लैटफ़ॉर्म के, डिस्क पर आधारित फ़ाइल सिस्टम से मेल खाता हो. आपके ऐप्लिकेशन का डेटा सेव करने के लिए, सिस्टम आपको कई विकल्प देता है:
- ऐप्लिकेशन के लिए खास तौर पर बना स्टोरेज: वे फ़ाइलें सेव करें जो सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनी हों. इन्हें इंटरनल स्टोरेज वॉल्यूम में मौजूद खास डायरेक्ट्री या एक्सटर्नल स्टोरेज में मौजूद अलग-अलग खास डायरेक्ट्री में सेव किया जा सकता है. संवेदनशील जानकारी को सेव करने के लिए, इंटरनल स्टोरेज में मौजूद डायरेक्ट्री का इस्तेमाल करें. इससे दूसरे ऐप्लिकेशन इस जानकारी को ऐक्सेस नहीं कर पाएंगे.
- शेयर किया गया स्टोरेज: वे फ़ाइलें सेव करें जो आपके ऐप्लिकेशन को, अन्य ऐप्लिकेशन के साथ शेयर करनी हो. इनमें मीडिया, दस्तावेज़, और अन्य फ़ाइलें शामिल हैं.
- प्राथमिकताएं: की-वैल्यू पेयर में पुराना, निजी डेटा सेव करें.
- डेटाबेस: Room परसिस्टेंस लाइब्रेरी का इस्तेमाल करके, स्ट्रक्चर्ड डेटा को किसी निजी डेटाबेस में सेव करें.
इन विकल्पों की खास बातों के बारे में यहां दी गई टेबल में बताया गया है:
| कॉन्टेंट किस तरह का है | ऐक्सेस करने का तरीका | अनुमतियां ज़रूरी हैं | क्या अन्य ऐप्लिकेशन इसे ऐक्सेस कर सकते हैं? | क्या ऐप्लिकेशन अनइंस्टॉल करने पर फ़ाइलें हट जाती हैं? | |
|---|---|---|---|---|---|
| ऐप्लिकेशन से जुड़ी फ़ाइलें | ऐसी फ़ाइलें जो सिर्फ़ आपके ऐप्लिकेशन के इस्तेमाल के लिए बनी हों | डिवाइस के स्टोरेज से, 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 की अनुमति चाहिए |
नहीं |
| दस्तावेज़ और अन्य फ़ाइलें | शेयर किए जा सकने वाले अन्य तरह के कॉन्टेंट में, डाउनलोड की गई फ़ाइलें भी शामिल हैं | Storage Access Framework | कोई नहीं | हां, सिस्टम फ़ाइल पिकर के ज़रिए | नहीं |
| ऐप्लिकेशन की प्राथमिकताएं | की-वैल्यू पेयर | 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 एपीआई के ऐक्सेस वाली डायरेक्ट्री के बाहर सेव की गई हो. अगर आपने ऐप्लिकेशन से जुड़ी फ़ाइलें बाहरी स्टोरेज में सेव की हैं, तो इन फ़ाइलों को बाहरी स्टोरेज में मौजूद ऐप्लिकेशन से जुड़ी डायरेक्ट्री में रखकर, स्कोप किए गए स्टोरेज को आसानी से अपनाया जा सकता है. इस तरह, स्कोप्ड स्टोरेज चालू होने पर भी, आपका ऐप्लिकेशन इन फ़ाइलों को ऐक्सेस कर पाता है.
अपने ऐप्लिकेशन को स्कोप किए गए स्टोरेज के लिए तैयार करने के लिए, स्टोरेज के इस्तेमाल के उदाहरण और सबसे सही तरीके वाली गाइड देखें. अगर आपके ऐप्लिकेशन का कोई ऐसा इस्तेमाल है जो स्कोप किए गए स्टोरेज के दायरे में नहीं आता है, तो सुविधा के लिए अनुरोध करें. आपके पास स्कोप किए गए स्टोरेज का इस्तेमाल कुछ समय के लिए बंद करने का विकल्प होता है.
किसी डिवाइस पर मौजूद फ़ाइलें देखना
किसी डिवाइस पर सेव की गई फ़ाइलें देखने के लिए, Android Studio के डिवाइस फ़ाइल एक्सप्लोरर का इस्तेमाल करें.
अन्य संसाधन
डेटा स्टोरेज के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधन देखें.