Storage Access Framework: यह क्या है, यह कैसे काम करता है और Android में फ़ाइल एक्सेस

लेखक: IT Sectr प्रकाशित: 2026-07-10 पढ़ने का समय: 6 मिनट

Storage Access Framework एक Android फ्रेमवर्क है जो सिस्टम चयन डायलॉग के माध्यम से फ़ाइलों और दस्तावेज़ों तक सुरक्षित पहुँच प्रदान करता है। स्टोरेज रीड की व्यापक अनुमतियाँ माँगने के बजाय, ऐप उपयोगकर्ता द्वारा चुनी गई फ़ाइल का URI लिंक प्राप्त करता है। Android Developers (2026) के अनुसार, SAF DocumentProvider के माध्यम से लोकल स्टोरेज, Google Drive और Dropbox क्लाउड सेवाओं का समर्थन करता है। यह फ्रेमवर्क Android 4.4 में पेश किया गया और Android 10 से दस्तावेज़ों के साथ काम करने का मानक बन गया।

मुख्य बिंदु

  • SAF एक Android फ्रेमवर्क है जो व्यापक अनुमतियों के बिना सिस्टम डायलॉग के माध्यम से फ़ाइलें चुनने के लिए है।
  • URI लिंक प्रत्यक्ष फ़ाइल पथ को बदलता है: ऐप content URI के माध्यम से फ़ाइल के साथ काम करता है।
  • Persistent permissions ऐप पुनरारंभ के बाद फ़ाइल तक पहुँच बनाए रखने की अनुमति देता है।
  • DocumentProvider क्लाउड और कस्टम स्टोरेज तक पहुँच के लिए SAF का विस्तार करता है।
  • Android 10 ने ऐप सैंडबॉक्स के बाहर फ़ाइलों तक पहुँचने के लिए SAF को अनिवार्य बना दिया।

Storage Access Framework क्या है?

Storage Access Framework Android SDK का एक हिस्सा है जो सिस्टम डायलॉग के माध्यम से दस्तावेज़ों को चुनने और बनाने के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है। SAF फ़ाइलों के भौतिक स्थान को छिपाता है: ऐप नहीं जानता कि फ़ाइल कहाँ से पढ़ी जा रही है — लोकल डिस्क, Google Drive या Dropbox।

SAF आर्किटेक्चर में तीन घटक शामिल हैं: क्लाइंट ऐप जो अनुरोध शुरू करता है, सिस्टम पिकर — एक मानक फ़ाइल चयन डायलॉग, और DocumentProvider — एक कंटेंट प्रोवाइडर जो किसी विशिष्ट स्टोरेज की फ़ाइलों तक पहुँच को कार्यान्वित करता है। उपयोगकर्ता डेटा स्रोत के बावजूद एक एकीकृत इंटरफ़ेस देखता है।

SAF Android 4.4 (API 19) से उपलब्ध है। शुरुआत में फ्रेमवर्क केवल दस्तावेज़ों का समर्थन करता था, लेकिन Android 5.0 में ACTION_OPEN_DOCUMENT_TREE के माध्यम से निर्देशिकाओं का समर्थन जोड़ा गया। Android 10 से, SAF ऐप-विशिष्ट स्टोरेज के बाहर किसी भी फ़ाइल तक पहुँचने का अनुशंसित तरीका बन गया।

SAF कैसे काम करता है: सिस्टम पिकर और URI

SAF ACTION_OPEN_DOCUMENT क्रिया के साथ Intent के माध्यम से एक सिस्टम फ़ाइल चयन डायलॉग शुरू करता है। उपयोगकर्ता उपलब्ध स्रोतों की सूची देखता है: आंतरिक स्टोरेज, Google Drive, Dropbox और अन्य पंजीकृत प्रदाता। फ़ाइल चुनने के बाद, सिस्टम अस्थायी पहुँच अधिकारों के साथ content URI लौटाता है

Content URI का प्रारूप content://com.android.externalstorage.documents/document/primary/Download/file.pdf है। file:// URI के विपरीत, content URI वास्तविक फ़ाइल पथ को प्रकट नहीं करता है और DocumentProvider के माध्यम से काम करता है। ऐप प्राप्त URI के माध्यम से ContentResolver.openInputStream के ज़रिए फ़ाइल पढ़ता है।

सिस्टम पिकर स्वचालित रूप से MIME प्रकारों द्वारा फ़ाइलों की खोज, सॉर्टिंग और फ़िल्टरिंग का समर्थन करता है। डेवलपर Intent.putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("application/pdf", "image/*")) के माध्यम से आवश्यक प्रकार निर्दिष्ट करता है, और पिकर केवल प्रासंगिक फ़ाइलें दिखाता है।

URI एक्सेस का जीवनचक्र

डिफ़ॉल्ट रूप से, URI ऐप पुनरारंभ या डिवाइस रीबूट तक मान्य होता है। दीर्घकालिक पहुँच के लिए, ऐप takePersistableUriPermission का अनुरोध करता है — यह डायलॉग के माध्यम से पुनः चयन किए बिना बाद के लॉन्च पर फ़ाइल पढ़ने की अनुमति देता है।

ACTION_OPEN_DOCUMENT और ACTION_CREATE_DOCUMENT

SAF फ़ाइलों के साथ काम करने के लिए तीन मुख्य क्रियाएँ प्रदान करता है: खोलना, बनाना और फ़ोल्डर ट्री चुनना। ACTION_OPEN_DOCUMENT मौजूदा फ़ाइल चुनने के लिए सिस्टम पिकर खोलता है। ACTION_CREATE_DOCUMENT एक नई फ़ाइल बनाता है — उपयोगकर्ता डायलॉग में नाम दर्ज करता है, और ऐप लेखन के लिए URI प्राप्त करता है।

ACTION_OPEN_DOCUMENT_TREE पूरी निर्देशिका चुनने और उसके अंदर की सभी फ़ाइलों तक पहुँच प्राप्त करने की अनुमति देता है। इसका उपयोग फ़ाइल मैनेजर, बैकअप और सिंक्रोनाइज़ेशन ऐप में किया जाता है। ऐप एक निर्देशिका URI प्राप्त करता है और DocumentFile के माध्यम से सामग्री को पुनरावर्ती रूप से सूचीबद्ध कर सकता है।

क्रियाउद्देश्यफ़्लैग
ACTION_OPEN_DOCUMENTमौजूदा फ़ाइल चुननाREAD_FLAG
ACTION_CREATE_DOCUMENTनई फ़ाइल बनानाWRITE_FLAG
ACTION_OPEN_DOCUMENT_TREEनिर्देशिका चुननाREAD + WRITE

प्रत्येक क्रिया के लिए, MIME प्रकार EXTRA_MIME_TYPES के माध्यम से निर्दिष्ट किए जाते हैं। कई प्रकार निर्दिष्ट किए जा सकते हैं: "application/pdf", "image/*", "text/plain"। यदि प्रकार निर्दिष्ट नहीं हैं, तो पिकर सभी फ़ाइलें दिखाता है।

Persistent URI permissions

Persistent URI permissions एक SAF तंत्र है जो वर्तमान सत्र समाप्त होने के बाद फ़ाइल तक पहुँच बनाए रखने की अनुमति देता है। इस फ़्लैग के बिना, URI केवल ऐप पुनरारंभ तक मान्य है। ऐप READ और WRITE फ़्लैग के साथ FLAG_GRANT_PERSISTABLE_URI_PERMISSION फ़्लैग का अनुरोध करता है।

अनुमतियाँ सहेजने के लिए ContentResolver.takePersistableUriPermission विधि का उपयोग किया जाता है। सिस्टम URI को एक विशेष रजिस्ट्री में सहेजता है और अगले ऐप लॉन्च पर पहुँच बहाल करता है। यह जाँचने के लिए कि क्या ऐप के पास URI तक स्थायी पहुँच है, ContentResolver.persistedUriPermissions का उपयोग किया जाता है।

उपयोगकर्ता सेटिंग्स → ऐप्स → अनुमतियाँ के माध्यम से सहेजी गई अनुमतियाँ रद्द कर सकता है। ऐप को उस परिदृश्य को संभालना चाहिए जब फ़ाइल तक पहुँच अप्रत्याशित रूप से खो जाए। काम शुरू करने से पहले ContentResolver.openInputStream के माध्यम से पहुँच की जाँच करने और SecurityException को सही ढंग से संभालने की अनुशंसा की जाती है।

कोड उदाहरण: SAF के माध्यम से फ़ाइल चयन

SAF एक मानक Intent के माध्यम से शुरू किया जाता है। कोड न्यूनतम है: ACTION_OPEN_DOCUMENT के साथ Intent बनाएँ, MIME प्रकार निर्दिष्ट करें, और ActivityResultContracts.StartActivityForResult के माध्यम से शुरू करें। फ़ाइल चुनने के बाद, callback data.data में URI प्राप्त करता है, जिसका उपयोग पढ़ने के लिए किया जाता है।

kotlin
val pickFile = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    result.data?.data?.let { uri ->
        val inputStream = contentResolver?.openInputStream(uri)
        // read from inputStream
    }
}

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    setType("application/pdf")
    putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
}
pickFile.launch(intent)

ACTION_CREATE_DOCUMENT के माध्यम से फ़ाइल बनाना

नई फ़ाइल लिखने के लिए, ACTION_CREATE_DOCUMENT का उपयोग करें। Intent MIME प्रकार और EXTRA_TITLE के माध्यम से फ़ाइल नाम स्वीकार करता है। फ़ोल्डर चुनने और पुष्टि करने के बाद, उपयोगकर्ता एक URI लौटाता है जिसमें ऐप ContentResolver.openOutputStream के माध्यम से डेटा लिखता है। सिस्टम स्वचालित रूप से चुने गए स्थान पर फ़ाइल बनाता है।

SAF बनाम READ_EXTERNAL_STORAGE

SAF पारंपरिक READ_EXTERNAL_STORAGE से सुरक्षा के प्रति मौलिक रूप से भिन्न दृष्टिकोण में भिन्न है। एक बार में पूरे स्टोरेज तक पहुँच का अनुरोध करने के बजाय, SAF केवल एक विशिष्ट फ़ाइल तक पहुँच का अनुरोध करता है। यह हमले की सतह को कम करता है और उपयोगकर्ता का विश्वास बढ़ाता है।

READ_EXTERNAL_STORAGE डिवाइस पर सभी फ़ाइलों तक पहुँच प्रदान करता है, जिसमें अन्य ऐप के फ़ोटो और दस्तावेज़ शामिल हैं। Android 10+ पर, यह दृष्टिकोण प्रतिबंधित है। इसके विपरीत, SAF केवल उपयोगकर्ता द्वारा चुनी गई फ़ाइल तक पहुँच प्रदान करता है और प्रत्येक फ़ाइल के लिए स्पष्ट पुष्टि की आवश्यकता होती है। बैच मीडिया संचालन के लिए MediaStore का उपयोग करें, व्यक्तिगत दस्तावेज़ों के लिए SAF का उपयोग करें।

SAF का मुख्य नुकसान प्रत्येक फ़ाइल को अलग-अलग चुनने की आवश्यकता है। बल्क संचालन (बैकअप, फ़ोल्डर सिंक्रोनाइज़ेशन) के लिए, ACTION_OPEN_DOCUMENT_TREE का उपयोग किया जाता है, जो चयनित निर्देशिका में सभी फ़ाइलों तक पहुँच प्रदान करता है। समाधान परिदृश्य पर निर्भर करता है: SAF उपयोगकर्ता चयन के लिए इष्टतम है, MediaStore प्रोग्रामेटिक मीडिया एक्सेस के लिए।

अक्सर पूछे जाने वाले प्रश्न

Android में Storage Access Framework क्या है?

Storage Access Framework एक Android फ्रेमवर्क है जो सिस्टम चयन डायलॉग के माध्यम से सुरक्षित फ़ाइल एक्सेस के लिए है। ऐप स्टोरेज रीड की व्यापक अनुमतियाँ माँगे बिना चयनित फ़ाइल के लिए content URI प्राप्त करता है।

SAF के माध्यम से फ़ाइल कैसे खोलें?

ACTION_OPEN_DOCUMENT के साथ Intent बनाएँ, setType के माध्यम से MIME प्रकार निर्दिष्ट करें, और ActivityResultContracts के माध्यम से शुरू करें। Callback में, data.data से URI प्राप्त करें और ContentResolver.openInputStream के माध्यम से पढ़ें।

Persistent URI permissions क्या हैं?

Persistent URI permissions ऐप पुनरारंभ के बाद URI तक पहुँच बनाए रखने का एक तंत्र है। इसे FLAG_GRANT_PERSISTABLE_URI_PERMISSION फ़्लैग और takePersistableUriPermission विधि के माध्यम से अनुरोध किया जाता है।

SAF किन MIME प्रकारों का समर्थन करता है?

SAF किसी भी MIME प्रकार का समर्थन करता है: application/pdf, image/*, text/plain, application/zip और अन्य। प्रकार EXTRA_MIME_TYPES सरणी के साथ Intent.putExtra के माध्यम से निर्दिष्ट किए जाते हैं।

SAF MediaStore से कैसे अलग है?

SAF उपयोगकर्ता द्वारा सिस्टम डायलॉग के माध्यम से व्यक्तिगत फ़ाइलें चुनने के लिए डिज़ाइन किया गया है। MediaStore उपयोगकर्ता की भागीदारी के बिना मीडिया डेटाबेस के माध्यम से डिवाइस पर सभी मीडिया फ़ाइलों तक प्रोग्रामेटिक पहुँच प्रदान करता है।

सारांश

  • Storage Access Framework एक Android फ्रेमवर्क है जो व्यापक अनुमतियों के बिना सिस्टम पिकर के माध्यम से सुरक्षित फ़ाइल एक्सेस के लिए है।
  • Content URI फ़ाइल पथ को बदलता है: ऐप सीधे file:// लिंक के बजाय DocumentProvider के माध्यम से फ़ाइलों के साथ काम करता है।
  • ACTION_OPEN_DOCUMENT मौजूदा फ़ाइल खोलता है, ACTION_CREATE_DOCUMENT नई फ़ाइल बनाता है, ACTION_OPEN_DOCUMENT_TREE फ़ोल्डर चुनता है।
  • Persistent permissions takePersistableUriPermission के माध्यम से ऐप पुनरारंभ के बाद URI तक पहुँच बनाए रखते हैं।
  • Android 10 ने SAF को ऐप-विशिष्ट स्टोरेज के बाहर फ़ाइलों तक पहुँचने के लिए अनिवार्य बना दिया, READ_EXTERNAL_STORAGE को प्रतिबंधित कर दिया।
  • DocumentProvider क्लाउड और कस्टम स्टोरेज के साथ एकीकरण के लिए SAF का विस्तार करता है।
  • चुनाव SAF और MediaStore के बीच परिदृश्य पर निर्भर करता है: SAF उपयोगकर्ता चयन के लिए, MediaStore प्रोग्रामेटिक मीडिया एक्सेस के लिए।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें