تُحسِّن وحدة MediaProvider البيانات الوصفية المفهرسة (الصوت والفيديو والصور) من بطاقات SD وأجهزة USB) وتوفر هذه البيانات للتطبيقات من خلال MediaStore متاح للجميع API. للحفاظ على خصوصية المستخدم، تفرض وحدة 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
ووحدة "أداة استخراج الوسائط" لتفعيل الفهرسة عبر 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
للحصول على بيانات التعريف. يمكنك تمديد مهلة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