ماژول 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