MediaProvider modülü, dizine alınmış meta verileri (SD kartlardan ve USB aygıtlarından ses, video ve görüntüler) optimize eder ve bu verileri MediaStore genel API'leri aracılığıyla uygulamalara sunar. Kullanıcı gizliliğini korumak için MediaProvider modülü, Android 10'da tanıtılan ve hassas konum meta verilerinin yeniden düzenlenmesini içeren kapsamlı depolama güvenlik modelini uygular. Bu modül güncellenebilir, Android'in güvenlik sorunlarına daha hızlı yanıt vermesini (hassas kullanıcı verilerini koruma altında tutma) ve yeni medya formatlarını daha hızlı eklemesini (hem kullanıcılar hem de geliştiriciler için tutarlılık sağlayarak) sağlar.
Android 10'daki değişiklikler
Android 10, özellikle medya dosyalarından verilerin tanımlanması ve çıkarılmasıyla ilgili çeşitli iyileştirmeler sundu:
Bir dosyanın MIME türünün ilk bölümünü kullanarak dosya içerik türünü belirleme. Örneğin, işletim sistemi hem
image/png
hem de imageimage/x-newly-invented-format
format'ın görüntü olduğunu bilir ve bu nedenle son kullanıcıya ilgili izinleri doğru bir şekilde açıklayabilir.Yalnızca dosya uzantısını kullanarak (ve güvenlik sorunlarından kaçınmak için içerik koklamayı kullanmadan) MIME türünü belirleme.
Yukarı akış Debian Linux ve Android eşlemelerinin bir kombinasyonunu kullanarak rastgele bir dosyanın MIME türünü belirleme.
video/*
veaudio/*
dosyalarından (MediaMetadataRetriever
aracılığıyla) veimage/*
dosyalarından (ExifInterface
aracılığıyla) ilgili verileri döndürme.
Android 11'deki değişiklikler
Android 11'de MediaProvider modülü, aşağıdaki iyileştirmelerle Android 10'da yapılan değişiklikleri temel alır:
İndekslemede iyileştirmeler. MediaProvider modülü artık kullanılabilir meta verileri MediaStore genel API'leriyle uzlaştırarak meta verileri dizine ekliyor. Değişiklikler şunları içerir:
Galeri tarzı uygulamaların medyayı bu sütuna göre hızla filtrelemesini sağlamak için yeni
is_favorite
sütunu veQUERY_ARG_MATCH_FAVORITE
bağımsız değişkeni.Renk uzayı meta verilerini indeksleme.
Galeri tarzı uygulamaların bu sütuna göre filtrelenmesini sağlamak için yeni 'is_trashed' sütunu ve
QUERY_ARG_MATCH_TRASHED
bağımsız değişkeni.createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
vecreateWriteRequest()
dahil olmak üzere, tek bir kullanıcı iletişim istemiyle birden çok öğenin toplu olarak değiştirilmesini sağlayan yeni API'ler.Önceki bir senkronizasyon noktasından bu yana meydana gelen değişiklikleri hızlı ve güvenilir bir şekilde algılamak için yeni
GENERATION_ADDED
veGENERATION_MODIFIED
sütunları.Yukarıda belirtilmeyen ek meta veri sütunlarıyla kullanım için yeni
GROUP BY
genel API'si.
PNG ve WebP kapsayıcılarından meta verileri çıkarmak için
ExifInterface
iyileştirme.Ekran görüntülerinde
DateTimeOriginal
meta verileri yazmak içinSystemUI
iyileştirmeler.
Ayrıca, artık yeni medya biçimleri ekleyerek, hangi depolama aygıtlarının dizine eklenmesi gerektiğini işaretleyerek ve hatta MTP yığınını değiştirerek MediaProvider'ı özelleştirebilirsiniz. Ayrıntılar için, bkz. Özelleştirme .
Modül sınırı
Android 11, packages/providers/MediaProvider
içindeki tüm kodu, MTP ile ilgili mantığın dikkate değer istisnası dışında yeni bir konuma taşır. Ek olarak, frameworks/base/core/java/android/provider/MediaStore.java
şimdi package packages/providers/MediaProvider
adresindeki modül sınırının içindedir .
Paket formatı
MediaProvider modülü, APK-in-APEX 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 olmalısınız).
Özel veya standart olmayan medya dosyası formatlarını kullanırken (örneğin, satıcıya özel bir Kamera uygulaması tarafından oluşturulan bir format), MediaProvider tarafından indekslemeyi etkinleştirmek için her bir özel formatı
MimeUtils
ve Media Extractor modülü ile kaydetmeniz gerekir.MediaProvider'ın
StorageManagerService
uygulamasında kullanılan özel bir depolama aygıtları kümesini (örneğin SD kart yuvaları ve USB bağlantı noktaları) endekslediğinden emin olmak içinVolumeInfo.MOUNT_FLAG_INDEXABLE
bayrağını ayarlayın.Özel (AOSP olmayan) bir MTP uygulaması kullanırken, uygulamanın MediaStore ile etkileşime girmesini sağlamak için uygulamanın yalnızca genel ve sistem API'lerine dayandığı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 formatları. Her yeni özel medya biçimi için, benzersiz dosya uzantısından bir MIME türüne bir eşleme sağlamalısınız. IANA kayıt sürecini takip etmenizi şiddetle 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çinMediaMetadataRetriever
danışmaya devam ediyor. Özel biçimler için meta verileri döndürmek için Android 10 Media Extractor'ı kullanın.image/*
dosyaları için MediaProvider, meta veriler içinExif
standartlaştırmaya devam ediyor. Herhangi bir özel görüntü formatı içinExif
meta verilerini çıkarmak ve döndürmek içinandroid.media.ExifInterface
genişletebilirsiniz.
Depolama aygıtları indeksleme bayrağı. MediaProvider,
StorageVolume.getMediaStoreVolumeName()
öğesinin boş olmadığı StorageManager.getStorageVolumes(StorageManager.getStorageVolumes()
tarafından döndürülen tüm birimleri dizine ekler. Dizine alınanları etkilemek için döndürülen birimlerin listesini özelleştirebilirsiniz, ancak geçici birimleri (USB OTG sürücüleri gibi) dahil etmemenizi öneririz.MTP yığını değiştirme. Android 11, MTP yığınını tamamen modül sınırının dışına yerleştirir ve genel API'lere karşı çalışmasını sağlar.
Test yapmak
Aşağıdaki testleri kullanarak MediaProvider'ın işlevselliğini doğrulayabilirsiniz:
MediaStore genel API'lerinin işlevselliğini doğrulamak için Android Uyumluluk Test Paketi'nin (CTS)
CtsProviderTestCases
paketindeki testleri kullanın.MediaProvider dahili öğelerinin 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