وحدة MediaProvider

تُحسِّن وحدة 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