MediaProvider modülü, dizine eklenen meta verileri (SD kartlardan ve USB cihazlardan ses, video ve resimler) optimize eder ve bu verileri, MediaStore herkese açık API'leri aracılığıyla uygulamaların kullanımına 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 deimage/x-newly-invented-format
'in resim olduğunu bilir ve bu nedenle son kullanıcıya ilgili izinleri 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 kombinasyonu kullanılarak rastgele bir dosyanın MIME türünü belirleme.
video/*
veaudio/*
dosyalarından (MediaMetadataRetriever
üzerinden) veimage/*
dosyalarından (ExifInterface
üzerinden) alakalı veriler döndürülüyor.
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 veQUERY_ARG_MATCH_FAVORITE
bağımsız değişkeni.Renk alanı meta verileri dizine ekleniyor.
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.Tek bir kullanıcı iletişim kutusu istemiyle birden fazla öğenin toplu olarak değiştirilmesini sağlayan
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
vecreateWriteRequest()
gibi yeni API'ler.Önceki bir senkronizasyon noktasından bu yana gerçekleşen değişikliklerin hızlı ve güvenilir bir şekilde algılanmasında kullanılacak yeni
GENERATION_ADDED
veGENERATION_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ülerinde
DateTimeOriginal
meta verisi yazmak içinSystemUI
ürününde yapılan iyileştirmeler.
Buna ek olarak, artık yeni medya biçimleri ekleyerek, dizine eklenmesi gereken depolama cihazlarını 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.
Paket biçimi
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 eklediğinden emin olmak içinVolumeInfo.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 belirleyebilir 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ı kesinlikle öneririz.
AOSP'de tanımlanmış bir uzantıyı veya MIME türünü yeniden tanımlayamazsınız.
MediaProvider,
video/*
veaudio/*
dosyaları içinMediaMetadataRetriever
danışmanlığına devam ediyor. Özel biçimler için meta verileri döndürmek amacıyla Android 10 Medya Ayıklayıcılarını kullanın.image/*
dosyaları için MediaProvider, meta verileriExif
ile standartlaştırmaya devam eder. Tüm özel resim biçimleri içinExif
meta verilerini çıkarmak ve döndürmek içinandroid.media.ExifInterface
öğesini genişletebilirsiniz.
Depolama cihazlarını dizine ekleme işareti. MediaProvider,
StorageVolume.getMediaStoreVolumeName()
değerinin null olmadığı durumlardaStorageManager.getStorageVolumes()
tarafından döndürülen tüm birimleri 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ı modül sınırının tamamen dışına taşır ve herkese açık API'lerde çalışmasını sağlar.
Test
MediaProvider'ın işlevselliğini 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 dahililerinin işlevselliğini doğrulamak için
MediaProviderTests
içindeki testleri kullanın.
Her iki test grubunu birlikte çalıştırmak için aşağıdaki atest
komutunu kullanın:
atest --test-mapping packages/providers/MediaProvider