27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main
yerine android-latest-release
kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
MediaProvider modülü
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
MediaProvider modülü, dizine eklenen meta verileri (SD kartlardan ve USB cihazlardan alınan ses, video ve resimler) optimize eder ve bu verileri MediaStore herkese açık API'leri aracılığıyla uygulamalara sunar.
MediaProvider modülü, kullanıcı gizliliğini korumak için Android 10'da kullanıma sunulan ve hassas konum meta verilerinin çıkartılmasını içeren kapsamlı depolama alanı güvenlik modelini uygular.
Güncelleme yapılabilen bu modül, Android'in güvenlik sorunlarına daha hızlı yanıt vermesini (hassas kullanıcı verilerini koruma) ve yeni medya biçimlerini daha hızlı eklemesini (hem kullanıcılara hem de geliştiricilere tutarlılık sağlar) sağlar.
Android 10'daki değişiklikler
Android 10, medya dosyalarındaki verileri tanımlama ve ayıklamayla ilgili olarak çeşitli iyileştirmeler getirdi. Özellikle:
Dosyanın MIME türünün ilk bölümünü kullanarak dosya içeriği türünü belirleme.
Örneğin, işletim sistemi hem image/png
hem de image/x-newly-invented-format
'in resim olduğunu bilir ve bu nedenle ilgili izinleri son kullanıcıya doğru bir şekilde açıklayabilir.
MIME türünü yalnızca dosya uzantısını kullanarak belirleme (ve güvenlik sorunlarını önlemek için içerik koku alma özelliğini kullanmadan).
Yukarı akış Debian Linux ve Android eşlemelerinin bir kombinasyonunu kullanarak rastgele bir dosyanın MIME türünü belirleme.
video/*
ve audio/*
dosyalarından (MediaMetadataRetriever
aracılığıyla) ve image/*
dosyalarından (ExifInterface
aracılığıyla) alakalı verileri döndürme.
Android 11'deki değişiklikler
Android 11'de MediaProvider modülü, Android 10'da yapılan değişiklikleri temel alarak aşağıdaki iyileştirmeleri içerir:
Dizine eklemeyle ilgili iyileştirmeler. MediaProvider modülü artık mevcut meta verileri MediaStore'un herkese açık API'leriyle eşleştirerek dizine ekler. Değişiklikler şunlardır:
Galeri tarzı uygulamaların medyayı bu sütuna göre hızlıca filtrelemesini sağlayan yeni is_favorite
sütunu ve QUERY_ARG_MATCH_FAVORITE
bağımsız değişkeni.
Renk alanı meta verilerini dizine ekleme.
Galeri tarzı uygulamaların bu sütuna göre filtrelenmesini sağlayan yeni "is_trashed" sütunu ve QUERY_ARG_MATCH_TRASHED
bağımsız değişkeni.
createDeleteRequest()
, createFavoriteRequest()
, createTrashRequest()
ve createWriteRequest()
dahil olmak üzere tek bir kullanıcı iletişim istemi ile birden fazla öğenin toplu olarak değiştirilmesini sağlayan yeni API'ler.
Önceki bir senkronizasyon noktasından bu yana gerçekleşen değişiklikleri hızlı ve güvenilir bir şekilde algılamak için kullanılacak yeni GENERATION_ADDED
ve GENERATION_MODIFIED
sütunları.
Yukarıda bahsedilmeyen ek meta veri sütunlarıyla kullanılmak üzere yeni GROUP BY
herkese açık API.
PNG ve WebP kapsayıcılarından meta verileri ayıklamak için ExifInterface
'te iyileştirme yapıldı.
Ekran görüntülerine DateTimeOriginal
meta verileri yazmak için SystemUI
'te iyileştirmeler yapıldı.
Ayrıca artık yeni medya biçimleri ekleyerek, hangi depolama cihazlarının dizine ekleneceğini işaretleyerek ve hatta MTP yığınını değiştirerek MediaProvider'ı özelleştirebilirsiniz. Ayrıntılar için Özelleştirme bölümüne bakın.
Modül sınırı
Android 11, MTP ile ilgili mantık hariç olmak üzere packages/providers/MediaProvider
içindeki tüm kodu yeni bir konuma taşır. Ayrıca frameworks/base/core/java/android/provider/MediaStore.java
, packages/providers/MediaProvider
'deki modül sınırının içinde yer alır.
MediaProvider modülü, APEX içinde APK biçimindedir.
Bağımlılıklar
MediaProvider bağımlılıkları özelleştirmelerle ilgilidir (yani MediaProvider'ı özelleştirirseniz uygulamanızın, özelleştirmenizle ilişkili bağımlılığı karşıladığından emin olmanız gerekir).
Özel veya standart olmayan medya dosyası biçimleri (ör. tedarikçiye özgü bir kamera uygulaması tarafından oluşturulan bir biçim) kullanırken MediaProvider tarafından dizine eklemeyi etkinleştirmek için her özel biçimi MimeUtils
ve Media Extractor modülüne kaydetmeniz gerekir.
MediaProvider'ın, StorageManagerService
uygulamasında kullanılan özel bir depolama cihazı grubunu (ör. SD kart yuvaları ve USB bağlantı noktaları) dizine eklemesini sağlamak için VolumeInfo.MOUNT_FLAG_INDEXABLE
işaretini ayarlayın.
Özel (AOSP olmayan) bir MTP uygulaması kullanırken uygulamanın MediaStore ile etkileşime geçmesini sağlamak için uygulamanın yalnızca herkese açık ve sistem API'lerini kullandığından emin olun.
Özelleştirme
Artık yeni medya biçimleri ekleyebilir, hangi depolama cihazlarının dizine ekleneceğini etkileyebilir ve MTP yığınını değiştirebilirsiniz.
Özel medya biçimleri. Her yeni özel medya biçimi için benzersiz dosya uzantısından MIME türüne bir eşleme sağlamanız gerekir. IANA kayıt sürecini uygulamanızı önemle tavsiye ederiz.
AOSP'de tanımlanmış bir uzantıyı veya MIME türünü yeniden tanımlayamazsınız.
MediaProvider, video/*
ve audio/*
dosyaları için MediaMetadataRetriever
ile danışmaya devam eder. Özel biçimler için meta verileri döndürmek üzere Android 10 Medya Ayıcılar'ı kullanın.
image/*
dosyaları için MediaProvider, meta verileri Exif
ile standartlaştırmaya devam eder. android.media.ExifInterface
işlevini genişleterek tüm özel resim biçimleri için Exif
meta verilerini ayıklayıp döndürebilirsiniz.
Depolama cihazı dizine ekleme işareti. MediaProvider, StorageVolume.getMediaStoreVolumeName()
değerinin null olmadığı durumlarda StorageManager.getStorageVolumes()
tarafından döndürülen tüm hacimleri dizine ekler. Dizine eklenen öğeleri etkilemek için döndürülen birimlerin listesini özelleştirebilirsiniz ancak geçici birimleri (USB OTG sürücüler gibi) dahil etmemenizi öneririz.
MTP yığınını değiştirme Android 11, MTP yığınını tamamen modül sınırının dışına yerleştirir ve herkese açık API'lerle çalışmasını sağlar.
Test
MediaProvider'ın işlevini aşağıdaki testleri kullanarak doğrulayabilirsiniz:
MediaStore'un herkese açık API'lerinin işlevini doğrulamak için Android Compatibility Test Suite (CTS) CtsProviderTestCases
paketindeki testleri kullanın.
MediaProvider'ın dahili işlevlerini doğrulamak için MediaProviderTests
'teki testleri kullanın.
Her iki test grubunu da birlikte çalıştırmak için aşağıdaki atest
komutunu kullanın:
atest --test-mapping packages/providers/MediaProvider
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],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"]]