تعمل وحدة MediaProvider على تحسين البيانات الوصفية المفهرَسة (الصوت والفيديو والصور من بطاقات SD وأجهزة USB) وإتاحة هذه البيانات للتطبيقات من خلال MediaStore public APIs. للحفاظ على خصوصية المستخدم، تفرض وحدة MediaProvider نموذج أمان "مساحة التخزين ذات النطاق المحدّد" الذي تم تقديمه في Android 10، والذي يتضمّن إخفاء البيانات الوصفية الحسّاسة للموقع الجغرافي. يمكن تحديث هذه الوحدة، ما يتيح لنظام Android الاستجابة بشكل أسرع لمشاكل الأمان (الحفاظ على حماية بيانات المستخدمين الحسّاسة) وإضافة تنسيقات وسائط جديدة بشكل أسرع (توفير اتساق لكل من المستخدمين والمطوّرين).
التغييرات في Android 10
قدّم نظام Android 10 عدة تحسينات متعلّقة بتحديد البيانات واستخراجها من ملفات الوسائط، وتشمل هذه التحسينات ما يلي:
تحديد نوع محتوى الملف باستخدام الجزء الأول من نوع MIME للملف على سبيل المثال، يعرف نظام التشغيل أنّ كلّ من
image/png
وimage/x-newly-invented-format
هما صورتان، وبالتالي يمكنه وصف الأذونات ذات الصلة بدقة للمستخدم النهائي.تحديد نوع MIME باستخدام امتداد الملف فقط (وبدون استخدام استكشاف المحتوى لتجنُّب مشاكل الأمان)
تحديد نوع MIME لملف عشوائي باستخدام مجموعة من عمليات ربط Linux وAndroid الرئيسية.
عرض البيانات ذات الصلة من ملفات
video/*
وaudio/*
(عبرMediaMetadataRetriever
) وimage/*
من الملفات (عبرExifInterface
).
التغييرات التي تم إجراؤها في Android 11
في Android 11، تعتمد وحدة MediaProvider على التغييرات التي تم إجراؤها في Android 10 مع التحسينات التالية:
تحسينات على الفهرسة تعمل وحدة MediaProvider الآن على فهرسة البيانات الوصفية من خلال التوفيق بين البيانات الوصفية المتاحة وواجهات برمجة تطبيقات MediaStore العامة. تشمل التغييرات ما يلي:
عمود
is_favorite
جديد ووسيطةQUERY_ARG_MATCH_FAVORITE
لتفعيل تطبيقات نمط المعرض لفلترة الوسائط بسرعة استنادًا إلى هذا العمود.فهرسة البيانات الوصفية لمساحة اللون
عمود 'is_trashed' جديد ووسيطة
QUERY_ARG_MATCH_TRASHED
لتفعيل فلترة التطبيقات بنمط المعرض استنادًا إلى هذا العمود.واجهات برمجة تطبيقات جديدة تتيح تعديل عناصر متعددة بشكل مجمّع من خلال طلب حوار واحد من المستخدِم، بما في ذلك
createDeleteRequest()
وcreateFavoriteRequest()
createTrashRequest()
وcreateWriteRequest()
يتم استخدام أعمدة
GENERATION_ADDED
وGENERATION_MODIFIED
جديدة للاستخدام في رصد التغييرات التي حدثت منذ نقطة مزامنة سابقة بسرعة وموثوقية.واجهة برمجة تطبيقات
GROUP BY
العامة جديدة للاستخدام مع أعمدة البيانات الوصفية الإضافية غير المذكورة أعلاه.
تم تحسين
ExifInterface
لاستخراج البيانات الوصفية من حاويات PNG وWebP.تحسينات على
SystemUI
لكتابة البيانات الوصفيةDateTimeOriginal
في لقطات الشاشة
بالإضافة إلى ذلك، يمكنك الآن تخصيص MediaProvider من خلال إضافة تنسيقات وسائط جديدة، ووضع علامة على أجهزة التخزين التي يجب فهرستها، وحتى استبدال حِزمة MTP . لمعرفة التفاصيل، يُرجى الاطّلاع على التخصيص.
حدود الوحدة
ينقل نظام التشغيل Android 11 كل الرموز البرمجية في
packages/providers/MediaProvider
إلى موقع جديد، باستثناء منطق MTP المرتبط بشكل ملحوظ. فضلاً عن ذلك،
أصبح frameworks/base/core/java/android/provider/MediaStore.java
الآن داخل
حدود الوحدة على packages/providers/MediaProvider
.
تنسيق الحزمة
تكون وحدة MediaProvider بتنسيق APK-in-APEX.
التبعيات
ترتبط تبعيات MediaProvider بـ التخصيصات (أي أنّه في حال تخصيص MediaProvider، يجب التأكّد من أنّ عملية التنفيذ تتوافق مع الاعتمادية المرتبطة بتخصيصك).
عند استخدام تنسيقات ملفات وسائط مخصّصة أو غير عادية (مثل تنسيق يتم إنشاؤه من خلال تطبيق "الكاميرا" الخاص بالمورّد)، يجب تسجيل كل تنسيق مخصّص في
MimeUtils
ووحدة "أداة استخراج الوسائط" لتفعيل الفهرسة من خلال MediaProvider.لضمان أنّ MediaProvider يُفهرس مجموعة مخصّصة من أجهزة التخزين (مثل فتحات بطاقة SD ومنافذ USB) المستخدَمة في عملية تنفيذ
StorageManagerService
، اضبط علامةVolumeInfo.MOUNT_FLAG_INDEXABLE
.عند استخدام تنفيذ بروتوكول نقل الوسائط (MTP) المخصّص (الذي لا يتوافق مع بروتوكول AOSP)، تأكَّد من أنّ التنفيذ يعتمد فقط على واجهات برمجة التطبيقات العامة وواجهات برمجة التطبيقات الخاصة بالنظام لإتاحة التفاعل مع MediaStore.
التخصيص
يمكنك الآن إضافة تنسيقات وسائط جديدة، والتأثير في أجهزة التخزين التي تتم فهرستها، واستبدال حِزمة MTP.
تنسيقات الوسائط المخصّصة: بالنسبة إلى كل تنسيق وسائط مخصّصة جديدة، يجب توفير عملية ربط من امتداد الملف الفريد إلى نوع MIME. ننصحك بشدة باتّباع عملية التسجيل في هيئة أرقام الإنترنت المخصصة (IANA).
لا يمكنك إعادة تعريف إضافة أو نوع MIME سبق أن تم تحديدهما في AOSP.
بالنسبة إلى ملفات
video/*
وaudio/*
، يواصل MediaProvider الرجوع إلىMediaMetadataRetriever
. استخدِم أدوات استخراج الوسائط من Android 10 لعرض البيانات الوصفية للتنسيقات المخصَّصة.بالنسبة إلى ملفات
image/*
، يواصل MediaProvider استخدامExif
لتوحيد metadata. يمكنك توسيع نطاقandroid.media.ExifInterface
لاستخراج بياناتExif
الوصفية وإعادتها لأيّ تنسيقات صور مخصّصة.
علامة فهرسة أجهزة التخزين يفهرس MediaProvider جميع وحدات التخزين التي يعرضها
StorageManager.getStorageVolumes()
حيث لا تكون قيمةStorageVolume.getMediaStoreVolumeName()
خالية. يمكنك تخصيص قائمة الأقراص التي يتم عرضها للتأثير في ما يتم فهرسته، ولكننا ننصحك بعدم تضمين الأقراص المؤقتة (مثل محركات أقراص USB OTG).استبدال حِزمة MTP يضع Android 11 حزمة بروتوكول نقل الوسائط (MTP) خارج حدود الوحدة تمامًا ويضمن أنّها تعمل مع واجهات برمجة التطبيقات العامة.
الاختبار
يمكنك التحقّق من وظيفة MediaProvider باستخدام الاختبارات التالية:
للتحقّق من وظائف واجهات برمجة تطبيقات MediaStore العامة، يمكنك استخدام الاختبارات في حزمة
CtsProviderTestCases
من "مجموعة أدوات اختبار التوافق مع Android" (CTS).للتحقّق من وظائف وظائف MediaProvider الداخلية، استخدِم الاختبارات في
MediaProviderTests
.
لإجراء كلتا المجموعتَين من الاختبارات معًا، استخدِم الأمر atest
التالي:
atest --test-mapping packages/providers/MediaProvider