Android 4.4 (एपीआई लेवल 19) में, Storage Access Framework (SAF) की सुविधा लॉन्च की गई थी. SAF की मदद से, उपयोगकर्ता दस्तावेज़ों के लिए स्टोरेज उपलब्ध कराने वाली अपनी पसंदीदा सेवाओं पर, दस्तावेज़, इमेज, और अन्य फ़ाइलें ब्राउज़ और खोल सकते हैं. स्टैंडर्ड और इस्तेमाल में आसान यूज़र इंटरफ़ेस (यूआई) की मदद से, उपयोगकर्ता सभी ऐप्लिकेशन और सेवा देने वाली कंपनियों के लिए, एक जैसी फ़ाइलें ब्राउज़ कर सकते हैं और हाल ही में ऐक्सेस की गई फ़ाइलों को ऐक्सेस कर सकते हैं.
क्लाउड या लोकल स्टोरेज सेवाएं, इस इकोसिस्टम में हिस्सा ले सकती हैं. इसके लिए, उन्हें अपनी सेवाओं को DocumentsProvider
में शामिल करना होगा. जिन क्लाइंट ऐप्लिकेशन को सेवा देने वाली कंपनी के दस्तावेज़ों का ऐक्सेस चाहिए वे कुछ कोड लाइनों की मदद से, SAF के साथ इंटिग्रेट हो सकते हैं.
एसएफ़ में ये शामिल हैं:
- दस्तावेज़ उपलब्ध कराने वाली कंपनी: कॉन्टेंट उपलब्ध कराने वाली ऐसी कंपनी जो Google Drive जैसी स्टोरेज सेवा को, मैनेज की जा रही फ़ाइलों को दिखाने की अनुमति देती है. दस्तावेज़ उपलब्ध कराने वाली सेवा को
DocumentsProvider
क्लास के सबक्लास के तौर पर लागू किया जाता है. दस्तावेज़-प्रदाता स्कीमा, फ़ाइल की पारंपरिक हैरारकी पर आधारित होता है. हालांकि, यह आपके ऊपर है कि दस्तावेज़ देने वाली कंपनी, डेटा को फ़िज़िकली कैसे सेव करती है. Android प्लैटफ़ॉर्म में, पहले से मौजूद कई दस्तावेज़ उपलब्ध कराने वाली सेवाएं शामिल हैं. जैसे, डाउनलोड, इमेज, और वीडियो. - क्लाइंट ऐप्लिकेशन: यह एक कस्टम ऐप्लिकेशन है, जो
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
, औरACTION_OPEN_DOCUMENT_TREE
के लिए इंटेंट ऐक्शन को ट्रिगर करता है. साथ ही, दस्तावेज़ उपलब्ध कराने वाली कंपनियों से मिली फ़ाइलों को स्वीकार करता है. - पिकर: यह सिस्टम का यूज़र इंटरफ़ेस (यूआई) है. इसकी मदद से, उपयोगकर्ता उन सभी दस्तावेज़ उपलब्ध कराने वाली कंपनियों के दस्तावेज़ ऐक्सेस कर सकते हैं जो क्लाइंट ऐप्लिकेशन की खोज की शर्तों को पूरा करती हैं.
SAF में ये सुविधाएं मिलती हैं:
- इससे उपयोगकर्ताओं को सिर्फ़ एक ऐप्लिकेशन के बजाय, दस्तावेज़ उपलब्ध कराने वाली सभी सेवाओं का कॉन्टेंट ब्राउज़ करने की सुविधा मिलती है.
- इससे आपके ऐप्लिकेशन के पास, दस्तावेज़ उपलब्ध कराने वाली कंपनी के मालिकाना हक वाले दस्तावेज़ों का लंबे समय तक ऐक्सेस बना रहता है. इस ऐक्सेस की मदद से, उपयोगकर्ता सेवा देने वाली कंपनी के स्टोरेज में फ़ाइलें जोड़ सकते हैं, उनमें बदलाव कर सकते हैं, उन्हें सेव कर सकते हैं, और मिटा सकते हैं.
- यह एक से ज़्यादा उपयोगकर्ता खातों और ट्रांज़िशन रूट के साथ काम करता है. जैसे, यूएसबी स्टोरेज की सेवा देने वाली कंपनियां. ये रूट सिर्फ़ तब दिखते हैं, जब ड्राइव प्लग इन हो.
खास जानकारी
SAF, कॉन्टेंट उपलब्ध कराने वाली उस कंपनी के बारे में जानकारी देता है जो DocumentsProvider
क्लास की सबक्लास है. दस्तावेज़ उपलब्ध कराने वाली कंपनी के पास, डेटा को फ़ाइल की परंपरागत हैरारकी के तौर पर व्यवस्थित किया जाता है:

यहां दी गई बातों का ध्यान रखें:
- दस्तावेज़ उपलब्ध कराने वाली हर कंपनी, एक या एक से ज़्यादा रूट की जानकारी देती है. ये रूट, दस्तावेज़ों के ट्री को एक्सप्लोर करने के लिए शुरुआती पॉइंट होते हैं.
हर रूट का एक यूनीक
COLUMN_ROOT_ID
होता है. साथ ही, यह उस रूट के कॉन्टेंट को दिखाने वाले दस्तावेज़ (डायरेक्ट्री) पर ले जाता है. डिज़ाइन के हिसाब से रूट डाइनैमिक होते हैं, ताकि कई खातों, ट्रांज़िटरी यूएसबी स्टोरेज डिवाइसों या उपयोगकर्ता के लॉगिन और लॉग आउट जैसे इस्तेमाल के उदाहरणों के साथ काम किया जा सके. - हर रूट में एक दस्तावेज़ होता है. वह दस्तावेज़, 1 से N दस्तावेज़ों पर ले जाता है. साथ ही, इनमें से हर दस्तावेज़, 1 से N दस्तावेज़ों पर ले जा सकता है.
- हर स्टोरेज बैकएंड, अलग-अलग फ़ाइलों और डायरेक्ट्री को दिखाता है. इसके लिए, वह उनका रेफ़रंस एक यूनीक
COLUMN_DOCUMENT_ID
के तौर पर दिखाता है. दस्तावेज़ आईडी यूनीक होते हैं और जारी होने के बाद नहीं बदलते. ऐसा इसलिए, क्योंकि इनका इस्तेमाल डिवाइस के रीबूट होने पर भी यूआरआई के लिए किया जाता है. - दस्तावेज़, किसी खास MIME टाइप वाली खोली जा सकने वाली फ़ाइल हो सकते हैं. इसके अलावा, वे
MIME_TYPE_DIR
MIME टाइप वाली डायरेक्ट्री भी हो सकती हैं जिसमें अन्य दस्तावेज़ मौजूद हों. - हर दस्तावेज़ में अलग-अलग सुविधाएं हो सकती हैं, जैसा कि
COLUMN_FLAGS
में बताया गया है. उदाहरण के लिए,FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
, औरFLAG_SUPPORTS_THUMBNAIL
. एक हीCOLUMN_DOCUMENT_ID
को कई डायरेक्ट्री में शामिल किया जा सकता है.
कंट्रोल फ़्लो
दस्तावेज़ उपलब्ध कराने वाले का डेटा मॉडल, फ़ाइल की पारंपरिक हैरारकी पर आधारित होता है. हालांकि, अपने डेटा को अपनी पसंद के मुताबिक सेव किया जा सकता है. इसके लिए ज़रूरी है कि आपके पास DocumentsProvider
एपीआई का इस्तेमाल करके, डेटा को ऐक्सेस करने का विकल्प हो. उदाहरण के लिए, अपने डेटा के लिए टैग-आधारित क्लाउड स्टोरेज का इस्तेमाल किया जा सकता है.
दूसरे चित्र में दिखाया गया है कि सेव किए गए डेटा को ऐक्सेस करने के लिए, फ़ोटो ऐप्लिकेशन कैसे SAF का इस्तेमाल कर सकता है:

यहां दी गई बातों का ध्यान रखें:
- SAF में, सेवा देने वाली कंपनियां और क्लाइंट सीधे तौर पर इंटरैक्ट नहीं करते. क्लाइंट, फ़ाइलों के साथ इंटरैक्ट करने की अनुमति का अनुरोध करता है. इसका मतलब है कि फ़ाइलों को पढ़ना, उनमें बदलाव करना, उन्हें बनाना या मिटाना.
- इंटरैक्शन तब शुरू होता है, जब कोई ऐप्लिकेशन, जैसे कि फ़ोटो ऐप्लिकेशन, इंटेंट
ACTION_OPEN_DOCUMENT
याACTION_CREATE_DOCUMENT
को ट्रिगर करता है. इंटेंट में फ़िल्टर शामिल किए जा सकते हैं, ताकि शर्तों को और बेहतर बनाया जा सके. जैसे, "मुझे ऐसी सभी फ़ाइलें दिखाएं जिन्हें खोला जा सकता है और जिनका एमआईएम टाइप 'इमेज' है." - इंटेंट ट्रिगर होने के बाद, सिस्टम पिकर हर रजिस्टर किए गए प्रोवाइडर के पास जाता है और उपयोगकर्ता को मैच होने वाले कॉन्टेंट रूट दिखाता है.
- पिकर, उपयोगकर्ताओं को दस्तावेज़ों को ऐक्सेस करने के लिए एक स्टैंडर्ड इंटरफ़ेस देता है. भले ही, दस्तावेज़ देने वाली सेवाएं बहुत अलग हों. उदाहरण के लिए, दूसरी इमेज में, Google Drive की सेवा देने वाली कंपनी, यूएसबी की सेवा देने वाली कंपनी, और क्लाउड की सेवा देने वाली कंपनी को दिखाया गया है.
तीसरे चित्र में, उपयोगकर्ता इमेज खोजने के लिए खोले गए पिकर से डाउनलोड फ़ोल्डर को चुन रहा है. पिकर, क्लाइंट ऐप्लिकेशन के लिए उपलब्ध सभी रूट भी दिखाता है.
जब उपयोगकर्ता 'डाउनलोड' फ़ोल्डर चुनता है, तब इमेज दिखती हैं. चौथे चित्र में इस प्रोसेस का नतीजा दिखाया गया है. उपयोगकर्ता अब उन तरीकों से इमेज के साथ इंटरैक्ट कर सकता है जिनका इस्तेमाल, सेवा देने वाली कंपनी और क्लाइंट ऐप्लिकेशन करते हैं.
क्लाइंट ऐप्लिकेशन लिखना
Android 4.3 और इससे पुराने वर्शन पर, अगर आपको अपने ऐप्लिकेशन से किसी दूसरे ऐप्लिकेशन की फ़ाइल को वापस पाना है, तो उसे ACTION_PICK
या ACTION_GET_CONTENT
जैसे इंटेंट को चालू करना होगा. इसके बाद, उपयोगकर्ता किसी एक ऐप्लिकेशन को चुनता है, ताकि उससे कोई फ़ाइल चुनी जा सके. चुने गए ऐप्लिकेशन में उपयोगकर्ता इंटरफ़ेस होना चाहिए, ताकि उपयोगकर्ता उपलब्ध फ़ाइलों को ब्राउज़ करके चुन सके.
Android 4.4 (एपीआई लेवल 19) और उसके बाद के वर्शन पर, आपके पास ACTION_OPEN_DOCUMENT
इंटेंट का इस्तेमाल करने का अतिरिक्त विकल्प होता है. इससे, सिस्टम से कंट्रोल किया जाने वाला पिकर यूज़र इंटरफ़ेस (यूआई) दिखता है. इसकी मदद से, उपयोगकर्ता उन सभी फ़ाइलों को ब्राउज़ कर सकता है जिन्हें दूसरे ऐप्लिकेशन ने उपलब्ध कराया है. इस यूज़र इंटरफ़ेस से, उपयोगकर्ता किसी भी ऐप्लिकेशन से फ़ाइल चुन सकता है.
Android 5.0 (एपीआई लेवल 21) और इसके बाद के वर्शन पर, ACTION_OPEN_DOCUMENT_TREE
इंटेंट का भी इस्तेमाल किया जा सकता है. इससे उपयोगकर्ता, क्लाइंट ऐप्लिकेशन के लिए कोई डायरेक्ट्री चुन सकता है, ताकि वह उसे ऐक्सेस कर सके.
ध्यान दें: ACTION_OPEN_DOCUMENT
, ACTION_GET_CONTENT
की जगह नहीं ले सकता.
आपको किस तरह की संरचना का इस्तेमाल करना चाहिए, यह आपके ऐप्लिकेशन की ज़रूरतों पर निर्भर करता है:
- अगर आपको अपने ऐप्लिकेशन को डेटा पढ़ना या इंपोर्ट करना है, तो
ACTION_GET_CONTENT
का इस्तेमाल करें. इस तरीके से, ऐप्लिकेशन डेटा की कॉपी इंपोर्ट करता है. जैसे, इमेज फ़ाइल. - अगर आपको अपने ऐप्लिकेशन को, दस्तावेज़ उपलब्ध कराने वाली कंपनी के मालिकाना हक वाले दस्तावेज़ों का लंबे समय तक ऐक्सेस चाहिए, तो
ACTION_OPEN_DOCUMENT
का इस्तेमाल करें. उदाहरण के लिए, फ़ोटो में बदलाव करने वाला ऐसा ऐप्लिकेशन जो उपयोगकर्ताओं को दस्तावेज़ उपलब्ध कराने वाली सेवा में सेव की गई इमेज में बदलाव करने की अनुमति देता है.
सिस्टम पिकर यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, फ़ाइलों और डायरेक्ट्री को ब्राउज़ करने की सुविधा जोड़ने के बारे में ज़्यादा जानने के लिए, दस्तावेज़ों और अन्य फ़ाइलों को ऐक्सेस करने के बारे में गाइड देखें.
अन्य संसाधन
दस्तावेज़ उपलब्ध कराने वाली कंपनियों के बारे में ज़्यादा जानने के लिए, यहां दिए गए संसाधनों का इस्तेमाल करें:
सैंपल
वीडियो
- DevBytes: Android 4.4 के स्टोरेज ऐक्सेस फ़्रेमवर्क के बारे में जानकारी: प्रोवाइडर
- Storage Access Framework में वर्चुअल फ़ाइलें