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

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

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

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 है. आपके लिए ऐप्लिकेशन के डेटा के आधार पर, "fileprovider" स्ट्रिंग के साथ android:package मान में जोड़ा गया था. ज़्यादा जानकारी के लिए के बारे में ज़्यादा जानने के लिए, कॉन्टेंट यूआरआई और दस्तावेज़ android:authorities एट्रिब्यूट की वैल्यू सबमिट करें.

इसका <meta-data> चाइल्ड एलिमेंट <provider> उस एक्सएमएल फ़ाइल पर ले जाता है जिसमें आपकी पसंद की डायरेक्ट्री के बारे में बताया जाता है शेयर करने. 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

इससे जुड़ी अतिरिक्त जानकारी के लिए, इन्हें देखें: