إعداد مشاركة الملفات

لتقديم ملف من تطبيقك إلى تطبيق آخر بأمان، عليك ضبط تطبيقك لتقديم اسم معرِّف آمن للملف، على شكل معرِّف موارد منتظم للمحتوى. ينشئ مكوِّن FileProvider في نظام التشغيل Android معرّفات الموارد المنتظمة (URI) للمحتوى للملفات، وذلك بناءً على المواصفات التي تقدّمها في ملف XML. يشرح لك هذا الدرس كيفية إضافة طريقة التنفيذ التلقائية لـ FileProvider إلى تطبيقك وكيفية تحديد الملفات التي تريد عرضها في تطبيقات أخرى.

ملاحظة: الفئة FileProvider هي جزء من AndroidX Core Library. للحصول على معلومات عن تضمين هذه المكتبة في تطبيقك، يُرجى الاطّلاع على تعريف العناصر الاعتمادية.

تحديد FileProvider

يتطلب تحديد FileProvider لتطبيقك إدخالاً في البيان. يحدِّد هذا الإدخال السلطة المُستخدَمة في إنشاء معرّفات الموارد المنتظمة للمحتوى، بالإضافة إلى اسم ملف XML الذي يحدِّد الأدلة التي يمكن لتطبيقك مشاركتها.

يوضّح لك المقتطف التالي كيفية إضافة العنصر <provider> إلى البيان الذي يحدّد فئة FileProvider والجهة المانحة للاعتماد واسمملف XML:

<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 هيئة معرّف الموارد المنتظم (URI) التي تريد استخدامها لمعرّفات URI للمحتوى التي يتم إنشاؤها من قِبل FileProvider. في المثال، مصدر المرجع هو com.example.myapp.fileprovider. وبالنسبة إلى تطبيقك الخاص، حدِّد مرجعًا يتألف من قيمة android:package للتطبيق مع إلحاق السلسلة "fileprovider" به. لمزيد من المعلومات حول قيمة المرجع، يمكنك الاطّلاع على الموضوع معرّفات الموارد المنتظمة (URI) للمحتوى والمستندات حول السمة android:authorities.

يشير العنصر الفرعي <meta-data> من العنصر <provider> إلى ملف XML يحدّد الدلائل التي تريد مشاركتها. السمة android:resource هي مسار الملف واسمه، بدون امتداد .xml.ويمكن الاطّلاع على محتوى هذا الملف في القسم التالي.

تحديد الدلائل القابلة للمشاركة

بعد إضافة FileProvider إلى بيان التطبيق، عليك تحديد الأدلة التي تحتوي على الملفات التي تريد مشاركتها. لتحديد الкатаلوگ ، ابدأ بإنشاء الملف filepaths.xml في الدليل الفرعي res/xml/ في مشروعك. في هذا الملف، حدِّد الأدلة من خلال إضافة عنصر XML لكل دليل. يعرض لك المقتطف التالي مثالاً على محتوى res/xml/filepaths.xml. يوضّح المقتطف أيضًا كيفية مشاركة دليل فرعي من دليل files/ في مساحة التخزين الداخلية:

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

في هذا المثال، تشارك علامة <files-path> الأدلة ضمن دليل files/ في مساحة التخزين الداخلية لتطبيقك. تشارك السمة path الدليل الفرعي images/ من files/. تطلب السمة name من FileProvider إضافة جزء المسار myimages إلى معرّفات الموارد المنتظمة (URI) للمحتوى للملفات في الدليل الفرعي files/images/.

يمكن أن يتضمّن عنصر <paths> عناصر ثانوية متعددة، يحدّد كلّ منها directory مختلفًا لمشاركته. بالإضافة إلى العنصر <files-path>، يمكنك استخدام العنصر <external-path> لمشاركة الأدلة في مساحة التخزين الخارجية، و العنصر <cache-path> لمشاركة الأدلة في دليل التخزين المؤقت الداخلي لمعرفة المزيد من المعلومات حول العناصر الثانوية التي تحدد الأدلة المشتركة، يمكنك الاطّلاع على المستندات المرجعية الخاصة بـ FileProvider.

ملاحظة: يمكنك استخدام ملف XML لتحديد الأدلة التي تريد مشاركتها، ولا يمكنك إضافة دليل بشكل آلي.

لديك الآن مواصفات كاملة لـ FileProvider التي تنشئ معرّفات موارد منتظمة للمحتوى للملفات في دليل files/ في مساحة التخزين الداخلية لتطبيقك أو للملفات في الأدلة الفرعية لـ files/. عندما ينشئ تطبيقك رابطًا موحّدًا لعنوان الموارد (URI) للمحتوى الخاص بملف، يحتوي على السلطة المحدّدة في العنصر <provider> (com.example.myapp.fileprovider)، والمسار myimages/، واسم الملف.

على سبيل المثال، إذا حددت FileProvider وفقًا للمقتطفات في هذا الدرس، وطلبت معرّف موارد منتظم (URI) للمحتوى للملف default_image.jpg، ستعرض FileProvider معرّف الموارد المنتظم (URI) التالي:

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

لمزيد من المعلومات ذات الصلة، راجع: