फ़ाइल शेयर करने की सुविधा सेट अप की जा रही है

अपने ऐप्लिकेशन से किसी दूसरे ऐप्लिकेशन को फ़ाइल को सुरक्षित तरीके से उपलब्ध कराने के लिए, आपको अपने ऐप्लिकेशन को कॉन्टेंट यूआरआई के तौर पर, फ़ाइल का सुरक्षित हैंडल उपलब्ध कराने के लिए कॉन्फ़िगर करना होगा. एक्सएमएल में दी गई खास जानकारी के आधार पर, Android FileProvider कॉम्पोनेंट, फ़ाइलों के लिए कॉन्टेंट के यूआरआई जनरेट करता है. इस लेख में, अपने ऐप्लिकेशन में FileProvider को डिफ़ॉल्ट तौर पर लागू करने का तरीका बताया गया है. साथ ही, उन फ़ाइलों के बारे में बताने का तरीका भी बताया गया है जिन्हें आपको दूसरे ऐप्लिकेशन को ऑफ़र करना है.

ध्यान दें: FileProvider क्लास, AndroidX Core Library का हिस्सा है. इस लाइब्रेरी को अपने ऐप्लिकेशन में शामिल करने के बारे में जानने के लिए, डिपेंडेंसी का एलान करना देखें.

FileProvider की जानकारी दें

अपने ऐप्लिकेशन के लिए FileProvider तय करने के लिए, आपको अपने मेनिफ़ेस्ट में एक एंट्री डालनी होगी. इस एंट्री में, कॉन्टेंट यूआरआई जनरेट करने के लिए इस्तेमाल की जाने वाली अनुमति के साथ-साथ, एक्सएमएल फ़ाइल का नाम भी बताया गया है. इस फ़ाइल में, उन डायरेक्ट्री के बारे में बताया गया है जिन्हें आपका ऐप्लिकेशन शेयर कर सकता है.

नीचे दिए गए स्निपेट में, आपको अपने मेनिफ़ेस्ट में <provider> एलिमेंट जोड़ने का तरीका बताया गया है. इसमें, FileProvider क्लास, अथॉरिटी, और एक्सएमएल फ़ाइल के नाम की जानकारी दी गई है:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
        ...>
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>
        ...
    </application>
</manifest>

इस उदाहरण में, android:authorities एट्रिब्यूट उस यूआरआई सर्टिफ़िकेट के बारे में बताता है जिसे आपको FileProvider से जनरेट किए गए कॉन्टेंट यूआरआई के लिए इस्तेमाल करना है. उदाहरण में, सर्टिफ़िकेट देने वाली संस्था का नाम com.example.myapp.fileprovider है. अपने ऐप्लिकेशन के लिए, कोई ऐसी संस्था तय करें जिसमें ऐप्लिकेशन की android:package वैल्यू शामिल हो. इस वैल्यू के साथ "fileprovider" स्ट्रिंग जुड़ी हो. अथॉरिटी वैल्यू के बारे में ज़्यादा जानने के लिए, कॉन्टेंट यूआरआई विषय और android:authorities एट्रिब्यूट के दस्तावेज़ देखें.

<provider> का <meta-data> चाइल्ड एलिमेंट, एक एक्सएमएल फ़ाइल पर ले जाता है. इसमें उन डायरेक्ट्री के बारे में जानकारी होती है जिन्हें शेयर करना है. android:resource एट्रिब्यूट, फ़ाइल का पाथ और नाम है. इसमें .xml एक्सटेंशन नहीं होता. इस फ़ाइल के कॉन्टेंट के बारे में अगले सेक्शन में बताया गया है.

शेयर की जा सकने वाली डायरेक्ट्री के बारे में जानकारी दें

अपने ऐप्लिकेशन मेनिफ़ेस्ट में FileProvider जोड़ने के बाद, आपको उन डायरेक्ट्री के बारे में बताना होगा जिनमें आपको फ़ाइलें शेयर करनी हैं. डायरेक्ट्री तय करने के लिए, अपने प्रोजेक्ट की res/xml/ सबडायरेक्ट्री में filepaths.xml फ़ाइल बनाएं. इस फ़ाइल में, हर डायरेक्ट्री के लिए एक एक्सएमएल एलिमेंट जोड़कर डायरेक्ट्री की जानकारी दें. नीचे दिया गया स्निपेट आपको res/xml/filepaths.xml के कॉन्टेंट का एक उदाहरण दिखाता है. इस स्निपेट में, अपने इंटरनल स्टोरेज में मौजूद files/ डायरेक्ट्री की सबडायरेक्ट्री शेयर करने का तरीका भी बताया गया है:

<paths>
    <files-path path="images/" name="myimages" />
</paths>

इस उदाहरण में, <files-path> टैग आपके ऐप्लिकेशन के स्टोरेज की files/ डायरेक्ट्री में डायरेक्ट्री शेयर करता है. path एट्रिब्यूट, files/ की images/ सबडायरेक्ट्री शेयर करता है. name एट्रिब्यूट, FileProvider को files/images/ सबडायरेक्ट्री में मौजूद फ़ाइलों के लिए, कॉन्टेंट यूआरआई में पाथ सेगमेंट myimages जोड़ने के लिए कहता है.

<paths> एलिमेंट में कई चाइल्ड एलिमेंट हो सकते हैं. हर चाइल्ड एलिमेंट, शेयर करने के लिए एक अलग डायरेक्ट्री के बारे में बताता है. बाहरी स्टोरेज में डायरेक्ट्री शेयर करने के लिए, <files-path> एलिमेंट के अलावा, <external-path> एलिमेंट का इस्तेमाल किया जा सकता है. साथ ही, इंटरनल कैश डायरेक्ट्री में डायरेक्ट्री शेयर करने के लिए <cache-path> एलिमेंट का इस्तेमाल किया जा सकता है. शेयर की गई डायरेक्ट्री की जानकारी देने वाले चाइल्ड एलिमेंट के बारे में ज़्यादा जानने के लिए, FileProvider रेफ़रंस दस्तावेज़ देखें.

ध्यान दें: सिर्फ़ एक्सएमएल फ़ाइल से ही वे डायरेक्ट्री तय की जा सकती हैं जिन्हें आपको शेयर करना है. प्रोग्राम के हिसाब से कोई डायरेक्ट्री नहीं जोड़ी जा सकती.

अब आपके पास FileProvider की पूरी जानकारी उपलब्ध है. यह आपके ऐप्लिकेशन के स्टोरेज की files/ डायरेक्ट्री में मौजूद फ़ाइलों या files/ की सबडायरेक्ट्री में मौजूद फ़ाइलों के लिए, कॉन्टेंट यूआरआई जनरेट करता है. जब आपका ऐप्लिकेशन किसी फ़ाइल के लिए कॉन्टेंट यूआरआई जनरेट करता है, तो उसमें <provider> एलिमेंट (com.example.myapp.fileprovider) में बताई गई अनुमति, पाथ myimages/, और फ़ाइल का नाम शामिल होता है.

उदाहरण के लिए, अगर आपने इस लेसन में दिए गए स्निपेट के मुताबिक FileProvider के बारे में बताया है और default_image.jpg फ़ाइल के लिए कॉन्टेंट यूआरआई का अनुरोध किया है, तो FileProvider यह यूआरआई दिखाता है:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

इस बारे में ज़्यादा जानकारी के लिए, ये लेख पढ़ें: