ماژول MediaProvider ابرداده های نمایه شده (صوتی، ویدئو، و تصاویر از کارت های SD و دستگاه های USB) را بهینه می کند و آن داده ها را از طریق API های عمومی MediaStore در دسترس برنامه ها قرار می دهد. برای حفظ حریم خصوصی کاربر، ماژول MediaProvider مدل امنیتی فضای ذخیرهسازی محدوده معرفی شده در اندروید 10 را اعمال میکند، که شامل ویرایش ابردادههای حساس موقعیت مکانی است. این ماژول قابل بهروزرسانی است و اندروید را قادر میسازد تا به مسائل امنیتی سریعتر پاسخ دهد (حفظ دادههای حساس کاربر) و قالبهای رسانه جدید را سریعتر اضافه کند (برای کاربران و توسعهدهندگان سازگاری ایجاد میکند).
تغییرات اندروید 10
اندروید 10 چندین بهبود مربوط به شناسایی و استخراج داده ها از فایل های رسانه ای را معرفی کرد، به ویژه:
تعیین نوع محتوای فایل با استفاده از قسمت اول نوع MIME یک فایل. به عنوان مثال، سیستم عامل می داند که هر دو فرمت
image/png
وimage/x-newly-invented-format
تصاویر هستند، و بنابراین می تواند مجوزهای مربوطه را به طور دقیق برای کاربر نهایی توصیف کند.تعیین نوع MIME فقط با استفاده از پسوند فایل (و بدون استفاده از sniffing محتوا برای جلوگیری از مشکلات امنیتی).
تعیین نوع MIME یک فایل دلخواه با استفاده از ترکیبی از دبیان لینوکس بالادست و نگاشت اندروید .
بازگرداندن دادههای مرتبط از فایلهای
video/*
وaudio/*
(از طریقMediaMetadataRetriever
) و فایلهایimage/*
(از طریقExifInterface
).
تغییرات اندروید 11
در اندروید 11، ماژول MediaProvider بر اساس تغییرات ایجاد شده در اندروید 10 با بهبودهای زیر ساخته شده است:
بهبود در نمایه سازی ماژول MediaProvider اکنون ابردادهها را با تطبیق ابردادههای موجود با APIهای عمومی MediaStore فهرستبندی میکند. تغییرات عبارتند از:
ستون
is_favorite
و آرگومانQUERY_ARG_MATCH_FAVORITE
جدید برای فعال کردن برنامههای سبک گالری برای فیلتر کردن سریع رسانه بر اساس این ستون.نمایه سازی فراداده فضای رنگی
ستون «is_trashed» و آرگومان
QUERY_ARG_MATCH_TRASHED
جدید برای فعال کردن برنامههای سبک گالری برای فیلتر کردن بر اساس این ستون.API های جدیدی که امکان اصلاح انبوه چندین آیتم را با یک فرمان محاوره ای کاربر فراهم می کند، از جمله
createDeleteRequest()
،createFavoriteRequest()
،createTrashRequest()
وcreateWriteRequest()
.ستون های جدید
GENERATION_ADDED
وGENERATION_MODIFIED
برای استفاده در تشخیص سریع و مطمئن تغییراتی که از نقطه همگام سازی قبلی رخ داده است.API جدید
GROUP BY
عمومی برای استفاده با ستونهای فراداده اضافی که در بالا ذکر نشده است.
بهبود
ExifInterface
برای استخراج ابرداده از کانتینرهای PNG و WebP.بهبودهایی در
SystemUI
برای نوشتن ابردادهDateTimeOriginal
در عکسبرداری از صفحه نمایش.
علاوه بر این، اکنون میتوانید MediaProvider را با افزودن فرمتهای رسانهای جدید، علامتگذاری دستگاههای ذخیرهسازی ایندکس و حتی جایگزینی پشته MTP سفارشی کنید. برای جزئیات، به سفارشی سازی مراجعه کنید.
مرز ماژول
اندروید 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)، مطمئن شوید که پیادهسازی تنها به APIهای عمومی و سیستم متکی است تا پیادهسازی را برای تعامل با MediaStore فعال کند.
سفارشی سازی
اکنون میتوانید قالبهای رسانهای جدید اضافه کنید، بر روی ایندکس شدن دستگاههای ذخیرهسازی تأثیر بگذارید و پشته MTP را جایگزین کنید.
فرمت های رسانه ای سفارشی برای هر فرمت رسانه سفارشی جدید، باید یک نقشه از پسوند فایل منحصر به فرد به یک نوع MIME ارائه دهید. ما قویاً شما را تشویق می کنیم که روند ثبت نام IANA را دنبال کنید.
نمیتوانید پسوند یا نوع MIME را که قبلاً در AOSP تعریف شده است، دوباره تعریف کنید.
برای فایلهای
video/*
وaudio/*
، MediaProvider به مشاورهMediaMetadataRetriever
ادامه میدهد. از Android 10 Media Extractors برای بازگرداندن متادیتا برای فرمت های سفارشی استفاده کنید.برای فایل های
image/*
، MediaProvider به استانداردسازی درExif
برای ابرداده ادامه می دهد. میتوانیدandroid.media.ExifInterface
برای استخراج و بازگرداندن فرادادهExif
برای هر فرمت تصویر سفارشی گسترش دهید.
پرچم نمایه سازی دستگاه های ذخیره سازی MediaProvider تمام جلدهای بازگردانده شده توسط
StorageManager.getStorageVolumes()
را ایندکس می کند که در آنStorageVolume.getMediaStoreVolumeName()
غیر تهی است. میتوانید فهرست حجمهای بازگردانده شده را سفارشی کنید تا بر آنچه نمایهسازی میشود تأثیر بگذارد، اما توصیه میکنیم حجمهای گذرا (مانند درایوهای USB OTG) را وارد نکنید.جایگزینی پشته MTP. Android 11 پشته MTP را کاملاً خارج از مرز ماژول قرار می دهد و اطمینان می دهد که در برابر API های عمومی کار می کند.
تست کردن
با استفاده از تست های زیر می توانید عملکرد MediaProvider را تأیید کنید:
برای تأیید عملکرد APIهای عمومی MediaStore، از آزمایشهای موجود در بسته
CtsProviderTestCases
مجموعه تست سازگاری Android (CTS) استفاده کنید.برای تأیید عملکرد داخلی MediaProvider، از آزمایشات در
MediaProviderTests
استفاده کنید.
برای اجرای هر دو مجموعه تست با هم، از دستور atest
زیر استفاده کنید:
atest --test-mapping packages/providers/MediaProvider