وحدة 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 ووحدة Media Extractor لتفعيل الفهرسة من خلال 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