لتقديم ملف بأمان من تطبيقك إلى تطبيق آخر، يجب إعداد تطبيقك لتوفير
اسم معرِّف آمن للملف، في شكل معرّف موارد منتظم (URI) للمحتوى. ينشئ المكوِّن FileProvider
لنظام التشغيل Android معرّفات موارد منتظمة (URI) للمحتوى للملفات، بناءً على المواصفات التي تقدّمها في ملف XML. يوضّح لك هذا الدرس طريقة إضافة آلية تنفيذ FileProvider
التلقائية إلى تطبيقك، وطريقة تحديد الملفات التي تريد عرضها للتطبيقات الأخرى.
ملاحظة: يشكّل الصف FileProvider
جزءًا من
مكتبة AndroidX الأساسية. للحصول على معلومات
حول تضمين هذه المكتبة في تطبيقك، راجِع
تعريف التبعيات.
تحديد 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>
على عدة عناصر ثانوية يحدّد كل منها دليلاً مختلفًا لمشاركته. بالإضافة إلى العنصر <files-path>
، يمكنك استخدام العنصر <external-path>
لمشاركة الأدلة في مساحة تخزين خارجية، والعنصر <cache-path>
لمشاركة الأدلة في دليل ذاكرة التخزين المؤقت الداخلي. لمعرفة المزيد من المعلومات عن العناصر الثانوية التي تحدّد الأدلة المشتركة، راجِع المستندات المرجعية FileProvider
.
ملاحظة: ملف XML هو الطريقة الوحيدة التي يمكنك من خلالها تحديد الأدلة التي تريد مشاركتها، ولا يمكنك إضافة دليل بشكل آلي.
لديك الآن المواصفات الكاملة لـ FileProvider
الذي ينشئ معرّفات الموارد المنتظمة (URI) للمحتوى للملفات في دليل files/
على وحدة التخزين الداخلية لتطبيقك أو للملفات في الأدلة الفرعية لتطبيق files/
. عندما ينشئ تطبيقك معرّف موارد منتظم (URI) للمحتوى لأحد الملفات، يتضمّن التطبيق المرجع المحدّد في العنصر <provider>
(com.example.myapp.fileprovider
) والمسار myimages/
واسم الملف.
على سبيل المثال، إذا حدّدت FileProvider
وفقًا للمقتطفات الواردة في هذا الدرس، وطلبت معرّف موارد منتظم (URI) للمحتوى للملف default_image.jpg
، ستعرض FileProvider
معرّف الموارد المنتظم التالي:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
للحصول على معلومات إضافية ذات صلة، راجع: