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 kapsamlı depolama alanını güvenlik modeli Bu değişiklik, hassas konum meta verilerini çıkartmayı da içeriyor. 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:
Dosya içeriği türünü, dosyanın MIME türünün ilk bölümünü kullanarak belirleme. Örneğin, işletim sistemi hem
image/png
hem deimage/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/*
veaudio/*
dosyalarından ilgili veriler döndürülüyor (aracılığıyla)MediaMetadataRetriever
) veimage/*
dosya (ExifInterface
üzerinden).
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 meta verileri Mevcut meta verilerin MediaStore herkese açık API'leriyle uzlaştırılması. Değişiklikler şunlardır:
Etkinleştirilecek yeni
is_favorite
sütunu veQUERY_ARG_MATCH_FAVORITE
bağımsız değişkeni galeri tarzı uygulamaları kullanarak medyayı bu sütuna göre hızlıca filtreleyebilirsiniz.Renk alanı meta verilerini dizine ekleme.
Yeni "is_trashed" etkinleştirmek için sütununu ve
QUERY_ARG_MATCH_TRASHED
bağımsız değişkenini ekleyin galeri stili uygulamaları sayabiliriz.Tek bir kullanıcı ile birden fazla öğenin toplu olarak değiştirilmesini sağlayan yeni API'ler iletişim kutusu istemi,
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
vecreateWriteRequest()
.Hızlı bir şekilde kullanılacak yeni
GENERATION_ADDED
veGENERATION_MODIFIED
sütunları gerçekleşen değişiklikleri güvenilir bir şekilde tespit etmek için senkronizasyon noktası.Ek meta veri sütunlarıyla kullanım için yeni
GROUP BY
herkese açık API'si kullanılabilir.
PNG ve WebP'den meta veri ayıklamak için
ExifInterface
iyileştirmesi container'lar.Ekranda
DateTimeOriginal
meta verisi yazmak içinSystemUI
ürününde yapılan iyileştirmeler yakalamanız gerekir.
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
'teki 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 (yani MediaProvider'ı özelleştirirseniz uygulamanızın .
Özel veya standart olmayan medya dosya biçimlerini (örneğin, tarafından oluşturulan her özel kamera uygulaması tarafından dizine eklemeyi etkinleştirmek için
MimeUtils
ve Medya Ayıklayıcı modülü ile biçimlendirin MediaProvider'dır.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ç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 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 önceden tanımlanmış bir uzantıyı veya MIME türünü yeniden tanımlayamazsınız.
MediaProvider,
video/*
veaudio/*
dosyaları için danışmanlık yapmaya devam ediyorMediaMetadataRetriever
. Geri dönmek için Android 10 Medya Ayıklayıcıları kullanma meta verileri içerir.MediaProvider,
image/*
dosyaları içinExif
üzerinde standartlaştırmaya devam ediyor: meta verilerdir.android.media.ExifInterface
işlevini genişleterek tüm özel resim biçimleri içinExif
meta verilerini ayıklayıp döndürebilirsiniz.
Depolama cihazı dizine ekleme işareti. MediaProvider,
StorageVolume.getMediaStoreVolumeName()
null olmadığındaStorageManager.getStorageVolumes()
tarafından döndürülen tüm ciltleri dizine ekler. URL'nin dizine eklenen hacimleri etkilemek amacıyla döndürülen cilt listesidir. Ancak, Geçici birimler (USB OTG sürücüleri gibi) dahil.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
Aşağıdaki testleri kullanarak MediaProvider'ın işlevini 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
Her iki test grubunu da birlikte çalıştırmak için aşağıdaki atest
komutunu kullanın:
atest --test-mapping packages/providers/MediaProvider