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