تعمل وحدة MediaProvider على تحسين البيانات الوصفية المفهرَسة (الصوت والفيديو والصور من بطاقات SD وأجهزة USB) وتوفّر هذه البيانات للتطبيقات من خلال واجهات برمجة التطبيقات المفتوحة MediaStore. للحفاظ على خصوصية المستخدم، تفرض وحدة MediaProvider نموذج أمان "مساحة التخزين ذات النطاق المحدّد" الذي تم تقديمه في Android 10، والذي يتضمّن إخفاء البيانات الوصفية الحسّاسة للموقع الجغرافي. يمكن تحديث هذه الوحدة، ما يتيح لنظام Android الاستجابة بشكل أسرع لمشاكل الأمان (الحفاظ على حماية بيانات المستخدمين الحسّاسة) وإضافة تنسيقات وسائط جديدة بشكل أسرع (توفير اتساق لكل من المستخدمين والمطوّرين).
التغييرات في Android 10
قدّم نظام Android 10 العديد من التحسينات المتعلقة بتحديد البيانات واستخراجها من ملفات الوسائط، على وجه التحديد:
تحديد نوع محتوى الملف باستخدام الجزء الأول من نوع MIME للملف على سبيل المثال، يعرف نظام التشغيل أنّ كلّ من
image/png
وimage/x-newly-invented-format
هما صورتان، وبالتالي يمكنه وصف الأذونات ذات الصلة بدقة للمستخدم النهائي.تحديد نوع MIME باستخدام امتداد الملف فقط (وبدون استخدام استكشاف المحتوى لتجنُّب مشاكل الأمان)
تحديد نوع MIME لملف عشوائي باستخدام مجموعة من عمليات ربط الإصدارات السابقة من Debian 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
ووحدة Media Extractor لتفعيل الفهرسة من خلال MediaProvider.لضمان أنّ MediaProvider فهرس مجموعة مخصّصة من أجهزة التخزين (مثل فتحات بطاقة SD ومنافذ USB) المستخدَمة في عملية تنفيذ
StorageManagerService
، اضبط علامةVolumeInfo.MOUNT_FLAG_INDEXABLE
.عند استخدام عملية تنفيذ مخصّصة (غير تابعة لمشروع AOSP) لواجهة MTP، تأكَّد من أنّ عملية التنفيذ تعتمد فقط على واجهات برمجة التطبيقات العامة وواجهات برمجة تطبيقات النظام لتتمكّن من التفاعل مع 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
من مجموعة أدوات اختبار التوافق (CTS) لنظام التشغيل Android.للتحقّق من وظيفة الوظائف الداخلية في MediaProvider، استخدِم الاختبارات في
MediaProviderTests
.
لإجراء كلتا مجموعتَي الاختبارات معًا، استخدِم الأمر atest
التالي:
atest --test-mapping packages/providers/MediaProvider