از 27 مارس 2025، توصیه می کنیم از android-latest-release
به جای aosp-main
برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
ماژول MediaProvider
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
ماژول 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
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# MediaProvider module\n\nThe MediaProvider module optimizes indexed metadata (audio, video, and images\nfrom SD cards and USB devices) and makes that data available to apps through the\n[MediaStore public\nAPIs](https://developer.android.com/reference/android/provider/MediaStore).\nTo maintain user privacy, the MediaProvider module enforces the [scoped storage\nsecurity\nmodel](https://developer.android.com/training/data-storage/files/external-scoped)\nintroduced in Android 10, which includes redacting sensitive location metadata.\nThis module is updatable, enabling Android to respond faster to security issues\n(keeping sensitive user data protected) and add new media formats quicker\n(providing consistency to both users and developers).\n\nChanges in Android 10\n---------------------\n\nAndroid 10 introduced several improvements related to identifying and extracting\ndata from media files, specifically:\n\n- Determining the file content type using the first part of a file's MIME type.\n For example, the OS knows that both `image/png` and\n `image/x-newly-invented-format` are images, and can thus accurately describe\n relevant permissions to the end user.\n\n- Determining the MIME type using only the file extension (and without using\n [content sniffing](https://en.wikipedia.org/wiki/Content_sniffing)\n to avoid security issues).\n\n- Determining the MIME type of an arbitrary file using a combination of\n [upstream Debian Linux and Android\n mappings](https://android-review.googlesource.com/c/platform/libcore/+/735506).\n\n- Returning relevant data from `video/*` and `audio/*` files (via\n `MediaMetadataRetriever`) and `image/*` files (via `ExifInterface`).\n\nChanges in Android 11\n---------------------\n\nIn Android 11, the MediaProvider module builds on the\nchanges made in Android 10 with the following improvements:\n\n- Improvements to indexing. The MediaProvider module now indexes metadata by\n reconciling available metadata against MediaStore public APIs. Changes\n include:\n\n - New `is_favorite` column and `QUERY_ARG_MATCH_FAVORITE` argument to enable\n gallery-style apps to quickly filter media based on this column.\n\n - Indexing color space metadata.\n\n - New 'is_trashed' column and `QUERY_ARG_MATCH_TRASHED` argument to enable\n gallery-style apps to filter based on this column.\n\n - New APIs that enable bulk-modification of multiple items with a single user\n dialog prompt, including `createDeleteRequest()`, `createFavoriteRequest()`,\n `createTrashRequest()`, and `createWriteRequest()`.\n\n - New `GENERATION_ADDED` and `GENERATION_MODIFIED` columns for use in quickly\n and reliably detecting changes that have occurred since a previous\n synchronization point.\n\n - New `GROUP BY` public API for use with additional metadata columns not\n mentioned above.\n\n- Improvement to `ExifInterface` to extract metadata from PNG and WebP\n containers.\n\n- Improvements to `SystemUI` to write `DateTimeOriginal` metadata in screen\n captures.\n\nIn addition, you can now customize MediaProvider by adding new media formats,\nmarking which storage devices should be indexed, and even replacing the MTP\nstack. For details, see [Customization](#customization).\n\nModule boundary\n---------------\n\nAndroid 11 migrates all code in\n`packages/providers/MediaProvider` to a new location, with the notable exception\nof MTP-related logic. In addition,\n`frameworks/base/core/java/android/provider/MediaStore.java` is now *inside* the\nmodule boundary at `packages/providers/MediaProvider`.\n\nPackage format\n--------------\n\nThe MediaProvider module is in APK-in-APEX format.\n\nDependencies\n------------\n\nMediaProvider dependencies are related to [customizations](#customization) (that\nis, if you customize MediaProvider, you must ensure your implementation meets\nthe dependency associated with your customization).\n\n- When using custom or nonstandard media file formats (for example, a format\n generated by a vendor-specific Camera app), you must register each custom\n format with `MimeUtils` and the Media Extractor module to enable indexing by\n MediaProvider.\n\n- To ensure MediaProvider indexes a custom set of storage devices (such SD card\n slots and USB ports) used in a `StorageManagerService` implementation, set the\n `VolumeInfo.MOUNT_FLAG_INDEXABLE` flag.\n\n- When using a custom (non-AOSP) MTP implementation, ensure the implementation\n relies solely on public and system APIs to enable the implementation to\n interact with MediaStore.\n\nCustomization\n-------------\n\nYou can now add new media formats, influence which storage devices are indexed,\nand replace the MTP stack.\n\n- **Custom media formats.** For each new custom media format, you must provide a\n mapping from the unique file extension to a MIME type. We strongly encourage\n you to follow the [IANA registration\n process](https://www.iana.org/assignments/media-types/media-types.xhtml).\n\n - You can't redefine an extension or MIME type that's already defined in AOSP.\n\n - For `video/*` and `audio/*` files, MediaProvider continues consulting\n `MediaMetadataRetriever`. Use the Android 10 Media Extractors to return\n metadata for custom formats.\n\n - For `image/*` files, MediaProvider continues standardizing on `Exif` for\n metadata. You can extend `android.media.ExifInterface` to extract and return\n `Exif` metadata for any custom image formats.\n\n- **Storage devices indexing flag.** MediaProvider indexes all volumes returned\n by `StorageManager.getStorageVolumes()` where\n `StorageVolume.getMediaStoreVolumeName()` is non-null. You can customize the\n list of volumes returned to influence what is indexed, but we advise against\n including transient volumes (such as USB OTG drives).\n\n- **MTP stack replacement.** Android 11 places the MTP\n stack entirely outside the module boundary and ensures that it works against\n public APIs.\n\nTesting\n-------\n\nYou can verify the functionality of MediaProvider using the following tests:\n\n- To verify the functionality of MediaStore public APIs, use tests in the\n `CtsProviderTestCases` package of the Android Compatibility Test Suite (CTS).\n\n- To verify the functionality of MediaProvider internals, use tests in\n `MediaProviderTests`.\n\nTo run both sets of tests together, use the following `atest` command: \n\n atest --test-mapping packages/providers/MediaProvider"]]