मोबाइल उपकरणों पर बाहरी स्टोरेज एक हटाने योग्य डेटा मीडिया है जिसे उपयुक्त अनुमतियों वाला कोई भी ऐप एक्सेस कर सकता है। Android Open Source Project, 2026 के अनुसार, Android 10 से शुरू करके Google ने Scoped Storage पेश किया — एक मॉडल जो फ़ाइल सिस्टम तक सीधी पहुँच को प्रतिबंधित करता है और साझा मीडिया फ़ाइलों के साथ काम करने के लिए MediaStore API के उपयोग की आवश्यकता होती है। यह दृष्टिकोण उपयोगकर्ता डेटा की सुरक्षा बढ़ाता है और ऐप्स के बीच सूचना लीक को रोकता है।
मुख्य बातें
READ_EXTERNAL_STORAGE और WRITE_EXTERNAL_STORAGE Android 9 और उससे नीचे के लिए अनिवार्य हैंबाहरी स्टोरेज एक मेमोरी क्षेत्र है जो ऐप के संरक्षित सैंडबॉक्स का हिस्सा नहीं है और अन्य प्रोग्रामों के लिए सुलभ है। Android पर, यह शब्द आमतौर पर SD कार्ड को संदर्भित करता है, लेकिन बाहरी स्टोरेज में OTG एडॉप्टर के माध्यम से जुड़े USB ड्राइव और फ़ाइल सिस्टम स्तर पर एकीकृत क्लाउड ड्राइव भी शामिल हैं। आंतरिक स्टोरेज से मुख्य अंतर अलगाव की कमी है: उपयुक्त अनुमतियों वाला कोई भी ऐप बाहरी स्टोरेज में फ़ाइलों को पढ़ और संशोधित कर सकता है।
Android पर, बाहरी स्टोरेज दो मुख्य मोड में आता है: पोर्टेबल और अडॉप्टेबल। जब SD कार्ड को पोर्टेबल स्टोरेज के रूप में फ़ॉर्मेट किया जाता है, तो यह हटाने योग्य रहता है और FAT32 या exFAT में फ़ॉर्मेट होता है। अडॉप्टेबल स्टोरेज मोड में, कार्ड ext4 में फ़ॉर्मेट होता है और AES-128 का उपयोग करके एन्क्रिप्ट होता है, जिसके बाद सिस्टम इसे आंतरिक मेमोरी के विस्तार के रूप में मानता है। अडॉप्टेबल मोड Android 6.0 Marshmallow से उपलब्ध है, लेकिन डिवाइस निर्माता अक्सर अपने फ़र्मवेयर में इस सुविधा को अक्षम कर देते हैं। Google Play Console के आँकड़ों के अनुसार, केवल लगभग 12% Android डिवाइस अडॉप्टेबल स्टोरेज का समर्थन करते हैं, इसलिए एकमात्र विकल्प के रूप में SD कार्ड के माध्यम से आंतरिक मेमोरी के विस्तार पर भरोसा करने की अनुशंसा नहीं की जाती है।
iOS पर, पारंपरिक SD कार्ड उपलब्ध नहीं हैं। Apple एक बंद आर्किटेक्चर का उपयोग करता है जहाँ सभी स्टोरेज आंतरिक फ्लैश मेमोरी और iCloud पर बनाया गया है। बाहरी ड्राइव Lightning या USB-C पोर्ट के माध्यम से समर्थित हैं, लेकिन उन तक पहुँच सिस्टम फ़ाइल मैनेजर Files और उन ऐप्स तक सीमित है जो Document Picker के साथ एकीकृत होते हैं। उपयोगकर्ता तय करता है कि बाहरी स्रोत से कौन सी फ़ाइलें खोलनी हैं — ऐप स्पष्ट सहमति के बिना कनेक्टेड ड्राइव को स्कैन नहीं कर सकता।
बाहरी मीडिया का चुनाव गति, क्षमता और पोर्टेबिलिटी की आवश्यकताओं पर निर्भर करता है। विभिन्न प्रकार के मीडिया में मोबाइल ऐप्स में अलग-अलग गति विशेषताएँ, फ़ाइल सिस्टम और उपयोग के मामले होते हैं।
| मीडिया प्रकार | अधिकतम क्षमता | पढ़ने की गति | फ़ाइल सिस्टम |
|---|---|---|---|
| SD UHS-I | 2 TB | 104 MB/s तक | exFAT / FAT32 |
| SD UHS-II | 2 TB | 312 MB/s तक | exFAT / FAT32 |
| USB 3.0 OTG | 2 TB | 400 MB/s तक | exFAT / NTFS / FAT32 |
| USB-C SSD | 4 TB | 1000 MB/s तक | exFAT / APFS / NTFS |
SD कार्ड लिखने की गति के अनुसार वर्गीकृत किए जाते हैं: Class 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) और V90 (90 MB/s)। 4K वीडियो रिकॉर्डिंग के लिए कम से कम U3 या V30 कार्ड की आवश्यकता होती है। बड़ी मीडिया फ़ाइलों (फ़ोटो प्रोसेसिंग, वीडियो एडिटिंग) के साथ काम करने वाले मोबाइल ऐप्स के लिए, U3 क्लास और उससे ऊपर के कार्ड का उपयोग करने की अनुशंसा की जाती है। कार्ड की गति सीधे ऐप के प्रदर्शन को प्रभावित करती है: Class 10 कार्ड पर 4K वीडियो रिकॉर्ड करने से अपर्याप्त बैंडविड्थ के कारण फ़्रेम ड्रॉप हो सकते हैं। किसी ऐप के लिए SD कार्ड चुनते समय, न केवल गति वर्ग पर बल्कि एप्लिकेशन प्रदर्शन वर्ग रेटिंग पर भी ध्यान दें: A1 और A2 डेटाबेस और ऐप कैश संचालन के लिए महत्वपूर्ण न्यूनतम रैंडम रीड और राइट प्रदर्शन को इंगित करते हैं।
USB-OTG (On-The-Go) एडॉप्टर के माध्यम से मोबाइल डिवाइस से बाहरी USB ड्राइव कनेक्ट करने की अनुमति देता है। Android संस्करण 3.1 से OTG का समर्थन करता है, लेकिन ड्राइव को माउंट करने के लिए फ़ाइल सिस्टम समर्थन वाले कर्नेल की आवश्यकता होती है। FAT32 और exFAT डिफ़ॉल्ट रूप से समर्थित हैं, NTFS — केवल कस्टम कर्नेल वाले डिवाइसों पर या Paragon लाइब्रेरी के माध्यम से। iOS पर, USB ड्राइव समर्थन iOS 13 में Files ऐप के साथ दिखाई दिया। ड्राइव के साथ काम करने के लिए, ऐप को UIDocumentPickerViewController का उपयोग करना होगा, जो केवल उपयोगकर्ता द्वारा चुनी गई फ़ाइलों तक पहुँच प्रदान करता है — iOS ड्राइव के फ़ाइल सिस्टम तक पूर्ण पहुँच प्रदान नहीं करता।
क्लाउड सेवाएँ — iCloud, Google Drive, Dropbox — सिस्टम प्रदाताओं के माध्यम से डिवाइस के फ़ाइल सिस्टम में एकीकृत हो सकती हैं। iOS पर, iCloud Drive ऐप के Sandbox कंटेनर का हिस्सा है और फ़ाइलें उपयोगकर्ता के डिवाइसों के बीच स्वचालित रूप से सिंक होती हैं। Android पर, Google Drive फ़ाइलों को पढ़ने और लिखने के लिए API प्रदान करता है, लेकिन फ़ाइल सिस्टम में सीधा माउंट नहीं होता। बड़ी मात्रा में डेटा के साथ काम करने वाले मोबाइल ऐप्स के लिए, क्लाउड स्टोरेज SD कार्ड के विकल्प के रूप में काम कर सकता है, विशेष रूप से विस्तार स्लॉट के बिना डिवाइसों पर।
Android पर बाहरी स्टोरेज के साथ काम करना ऑपरेटिंग सिस्टम संस्करण और Scoped Storage मॉडल पर निर्भर करता है। फ़ाइल एक्सेस प्रक्रिया Android 9 और उससे नीचे, Android 10–12 और Android 13+ के लिए अलग है।
Android 10 से शुरू करके, साझा मीडिया फ़ाइलों तक पहुँचने का प्राथमिक तरीका MediaStore API है। यह API साझा स्टोरेज में इमेज, वीडियो और ऑडियो फ़ाइलों को पढ़ने और लिखने के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। किसी ऐप को अपनी फ़ाइलों तक पहुँचने के लिए READ_EXTERNAL_STORAGE अनुमति की आवश्यकता नहीं है, लेकिन अन्य ऐप्स की फ़ाइलों को पढ़ने के लिए अभी भी स्पष्ट उपयोगकर्ता अनुमति की आवश्यकता है। MediaStore स्वचालित रूप से मीडिया फ़ाइलों को इंडेक्स करता है और उन्हें क्वेरी करने के लिए ContentResolver प्रदान करता है।
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME
)
val cursor = contentResolver.query(collection, projection, null, null, null)
क्वेरी निष्पादित करने के बाद, आपको फ़ाइलों के URI वाला एक Cursor मिलता है। फ़ाइल पढ़ने के लिए, contentResolver.openInputStream(uri) के माध्यम से InputStream खोलें। लिखना इसी तरह contentResolver.openOutputStream(uri) के माध्यम से किया जाता है। MediaStore स्वचालित रूप से नाम विरोधों को संभालता है और contentResolver.insert(uri, values) के माध्यम से नई फ़ाइलें सम्मिलित करने की क्षमता प्रदान करता है, जो बनाई गई फ़ाइल का URI लौटाता है।
Storage Access Framework (SAF) Android 10+ पर मनमानी फ़ाइलों तक पहुँचने का अनुशंसित तरीका है। SAF एक सिस्टम फ़ाइल चयनकर्ता डायलॉग प्रदान करता है जिसके माध्यम से उपयोगकर्ता ऐप को किसी विशिष्ट फ़ाइल या निर्देशिका तक पहुँच प्रदान करता है। ऐप को एक एक्सेस URI मिलता है जो डिवाइस के रीबूट होने तक या सेटिंग्स में अनुमति स्पष्ट रूप से रद्द होने तक वैध रहता है। SAF को READ_EXTERNAL_STORAGE या WRITE_EXTERNAL_STORAGE अनुमतियों की आवश्यकता नहीं है, जो Google Play पर प्रकाशन को सरल बनाता है और अनुमति अनुरोधों की संख्या कम करता है।
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
Intent.FLAG_GRANT_READ_URI_PERMISSION
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)
iOS पर, बाहरी फ़ाइलों के साथ काम करना UIDocumentPickerViewController के आसपास बनाया गया है, जिसे उपयोगकर्ता विशिष्ट फ़ाइलों या निर्देशिकाओं का चयन करने के लिए खोलता है। ऐप के पास बाहरी ड्राइव के फ़ाइल सिस्टम तक सीधी पहुँच नहीं है — केवल उन फ़ाइलों तक जिन्हें उपयोगकर्ता ने स्पष्ट रूप से चुना है। फ़ाइल चयन के बाद, ऐप को Sandbox कंटेनर में एक अस्थायी URL मिलता है और वह FileManager के माध्यम से फ़ाइल के साथ काम कर सकता है।
UIDocumentPickerViewController उपयोगकर्ता को किसी भी उपलब्ध स्रोत से एक या अधिक फ़ाइलों का चयन करने की अनुमति देता है: iCloud Drive, कनेक्टेड USB ड्राइव, या तृतीय-पक्ष क्लाउड सेवा। चयन के बाद, कंट्रोलर URL की एक सरणी लौटाता है जिसे ऐप सत्र के दौरान पढ़ सकता है। ऐप बंद होने के बाद पहुँच बनाए रखने के लिए, आपको startAccessingSecurityScopedResource() कॉल करना होगा और UserDefaults में सुरक्षा-स्कोप्ड बुकमार्क सहेजना होगा।
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.data, .image],
asCopy: true
)
picker.delegate = self
func documentPicker(
controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
let data = try Data(contentsOf: url)
}
पैरामीटर asCopy: true का अर्थ है कि iOS फ़ाइल को ऐप के Sandbox कंटेनर में कॉपी करेगा, और ऐप को मूल फ़ाइल से स्वतंत्र अपनी प्रतिलिपि मिलेगी। यदि asCopy: false निर्दिष्ट किया गया है, तो ऐप को मूल फ़ाइल का संदर्भ मिलता है, लेकिन इसे एक्सेस करने के लिए url.startAccessingSecurityScopedResource() कॉल करना आवश्यक है। इस कॉल के बिना, फ़ाइल पढ़ने पर एक अपवाद होगा। फ़ाइल के साथ काम समाप्त करने के बाद, संसाधन को मुक्त करने और डिस्क्रिप्टर लीक को रोकने के लिए हमेशा url.stopAccessingSecurityScopedResource() कॉल करें।
बाहरी स्टोरेज की सुरक्षा आंतरिक स्टोरेज से कम है क्योंकि फ़ाइलें अन्य ऐप्स के लिए सुलभ हैं। READ_EXTERNAL_STORAGE अनुमति वाला कोई भी ऐप SD कार्ड पर सभी फ़ाइलों को पढ़ सकता है, जिसमें वे फ़ाइलें भी शामिल हैं जो आपके ऐप ने संवेदनशील डेटा को अस्थायी रूप से संग्रहीत करने के लिए बनाई हैं। एक दुर्भावनापूर्ण ऐप SD कार्ड को स्कैन कर सकता है और उपयोगकर्ता डेटा निकाल सकता है यदि वह एन्क्रिप्टेड नहीं है। इसलिए, बाहरी स्टोरेज में प्रमाणीकरण टोकन, पासवर्ड या उपयोगकर्ता के व्यक्तिगत डेटा को सादे टेक्स्ट में संग्रहीत करने की दृढ़ता से अनुशंसा नहीं की जाती है।
Android 10+ पर, Scoped Storage साझा फ़ाइल सिस्टम तक ऐप्स की पहुँच को काफी सीमित करता है। एक ऐप बिना अनुमति के केवल अपने द्वारा बनाई गई फ़ाइलों को पढ़ सकता है, और अन्य ऐप्स की फ़ाइलों तक पहुँचने के लिए SAF डायलॉग के माध्यम से स्पष्ट उपयोगकर्ता सहमति की आवश्यकता होती है। हालाँकि, यह प्रतिबंध 29 से कम लक्ष्य SDK संस्करण वाले ऐप्स पर लागू नहीं होता — वे पुराने मॉडल के तहत काम करना जारी रखते हैं, जो उन उपयोगकर्ताओं के लिए जोखिम पैदा करता है जिन्होंने अपने ऐप्स को अपडेट नहीं किया है। Google Play को 2021 से सभी नए और अपडेट किए गए ऐप्स के लिए targetSdkVersion 29+ की आवश्यकता है।
फ़ॉर्मेटिंग और एन्क्रिप्शन सुरक्षा का एक और महत्वपूर्ण पहलू है। पोर्टेबल स्टोरेज के रूप में फ़ॉर्मेट किया गया SD कार्ड डिफ़ॉल्ट रूप से सिस्टम द्वारा एन्क्रिप्ट नहीं किया जाता है। अडॉप्टेबल स्टोरेज का उपयोग करते समय भी, एन्क्रिप्शन केवल तभी सक्रिय होता है जब डिवाइस निर्माता ने फ़र्मवेयर में इस सुविधा को सक्षम किया हो। बाहरी स्टोरेज पर सहेजे गए संवेदनशील डेटा की सुरक्षा के लिए, AndroidX Security से EncryptedFile लाइब्रेरी का उपयोग करें, जो सिस्टम एन्क्रिप्शन से स्वतंत्र रूप से प्रत्येक फ़ाइल को AES256-GCM का उपयोग करके अलग से एन्क्रिप्ट करती है।
बाहरी स्टोरेज का प्रभावी उपयोग डेटा उपलब्धता और सुरक्षा के बीच संतुलन की आवश्यकता है। उपयोगकर्ता फ़ाइलों के विश्वसनीय भंडारण को सुनिश्चित करने के लिए इन नियमों का पालन करें।
Environment.getExternalStorageState() का उपयोग करें। कार्ड हटाया जा सकता है, क्षतिग्रस्त हो सकता है या लिखने के लिए अनुपलब्ध हो सकता हैयह याद रखना महत्वपूर्ण है कि बाहरी स्टोरेज विफलताओं के दौरान डेटा अखंडता की गारंटी नहीं देता है। SD कार्ड में पुनर्लेखन चक्रों की सीमित संख्या होती है, विशेष रूप से Class 4 और Class 6 के बजट मॉडल। गहन लेखन (उदाहरण के लिए, लॉगिंग या स्ट्रीमिंग डेटा कैशिंग) के साथ, एक कार्ड कुछ महीनों में विफल हो सकता है। ऐसे परिदृश्यों के लिए, आंतरिक मेमोरी या क्लाउड स्टोरेज का उपयोग करें, और बाहरी स्टोरेज पर केवल वे फ़ाइलें सहेजें जिनके नुकसान को उपयोगकर्ता स्वीकार्य मानेगा। StatFs के माध्यम से नियमित रूप से SD कार्ड की स्थिति जाँचें और उपयोगकर्ता को महत्वपूर्ण फ़ाइल सिस्टम त्रुटियों के बारे में सूचित करें।
अक्सर पूछे जाने वाले प्रश्न
Android 13+ पर, READ_EXTERNAL_STORAGE अनुमति को अधिक विस्तृत अनुमतियों से बदल दिया गया है: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO और READ_MEDIA_AUDIO। अन्य फ़ाइल प्रकारों के लिए, SAF का उपयोग करें।
हाँ, adoptable storage सुविधा Android 6.0+ पर उपलब्ध है। कार्ड AES-128 एन्क्रिप्शन के साथ ext4 में फ़ॉर्मेट होता है। हालाँकि, कई निर्माता इस विकल्प को अक्षम कर देते हैं, और लगभग 88% डिवाइस अडॉप्टेबल स्टोरेज का समर्थन नहीं करते हैं।
Environment.getExternalStorageState() विधि का उपयोग करें, जो स्थिति स्ट्रिंग लौटाती है। मान MEDIA_MOUNTED का अर्थ है कि कार्ड पढ़ने और लिखने के लिए उपलब्ध है। अन्य मान त्रुटियों या कार्ड की अनुपस्थिति को इंगित करते हैं।
Scoped Storage ऐप को उसके अपने कंटेनर और साझा MediaStore मीडिया गैलरी तक सीमित करता है। पूर्ण पहुँच डिवाइस पर किसी भी फ़ाइल को पढ़ने की अनुमति देती है। Scoped Storage उपयोगकर्ता डेटा की सुरक्षा बढ़ाता है और नए ऐप्स के लिए अनिवार्य है।
ACTION_OPEN_DOCUMENT_TREE क्रिया के साथ Intent लॉन्च करें, जो सिस्टम निर्देशिका चयनकर्ता डायलॉग खोलेगा। चयन के बाद, आपको रीबूट तक वैध URI अनुमति मिलती है। बाद में उपयोग के लिए इस URI को SharedPreferences में सहेजें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें