MediaProvider modülü, indekslenmiş meta verileri (SD kartlardan ve USB aygıtlarından gelen ses, video ve görüntüler) optimize eder ve bu verileri MediaStore genel API'leri aracılığıyla uygulamaların kullanımına sunar. Kullanıcı gizliliğini korumak için MediaProvider modülü, Android 10'da sunulan ve hassas konum meta verilerinin çıkarılmasını da içeren kapsamlı depolama güvenlik modelini uygular. Bu modül güncellenebilir olup, Android'in güvenlik sorunlarına daha hızlı yanıt vermesini (hassas kullanıcı verilerini koruma altında tutmasını) ve yeni medya formatlarını daha hızlı eklemesini (hem kullanıcılara hem de geliştiricilere tutarlılık sağlamasını) sağlar.
Android 10'daki değişiklikler
Android 10, özellikle medya dosyalarından veri tanımlama ve çıkarmayla 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 deimage/x-newly-invented-format
görsel olduğunu bilir ve böylece ilgili izinleri son kullanıcıya doğru bir şekilde tanımlayabilir.Yalnızca dosya uzantısını kullanarak (ve güvenlik sorunlarını önlemek için içerik koklamayı kullanmadan) MIME türünü belirleme.
Yukarı akışlı 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 mevcut 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ızlı bir şekilde filtrelemesini sağlayan yeni
is_favorite
sütunu veQUERY_ARG_MATCH_FAVORITE
bağımsız değişkeni.Renk alanı meta verilerinin indekslenmesi.
Galeri tarzı uygulamaların bu sütuna göre filtreleme yapmasını sağlayan 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 kutusu istemiyle birden çok öğenin toplu olarak değiştirilmesine olanak tanıyan yeni API'ler.Önceki bir senkronizasyon noktasından bu yana meydana gelen değişikliklerin hızlı ve güvenilir bir şekilde tespit edilmesinde kullanılmak üzere 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 yakalamalarında
DateTimeOriginal
meta verilerini yazmaya yönelikSystemUI
iyileştirmeleri.
Ayrıca artık yeni medya formatları ekleyerek, hangi depolama cihazlarının indekslenmesi 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, MTP ile ilgili mantık dışında, packages/providers/MediaProvider
tüm kodları yeni bir konuma taşıyor. Ayrıca, frameworks/base/core/java/android/provider/MediaStore.java
artık packages/providers/MediaProvider
adresindeki modül sınırının içindedir .
Paket formatı
MediaProvider modülü APK-in-APEX formatındadır.
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 özel formatı
MimeUtils
ve Media Extractor modülüne kaydetmeniz gerekir.MediaProvider'ın,
StorageManagerService
uygulamasında kullanılan özel bir depolama aygıtları kümesini (SD kart yuvaları ve USB bağlantı noktaları gibi) dizine eklemesini sağlamak içinVolumeInfo.MOUNT_FLAG_INDEXABLE
bayrağını ayarlayın.Özel (AOSP olmayan) bir MTP uygulaması kullanırken, uygulamanın MediaStore ile etkileşime girebilmesini sağlamak için uygulamanın yalnızca genel ve sistem API'lerine dayandığından emin olun.
Özelleştirme
Artık yeni medya formatları ekleyebilir, hangi depolama cihazlarının indeksleneceğ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 MIME türüne bir eşleme sağlamanız gerekir. IANA kayıt sürecini takip etmenizi ö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çinMediaMetadataRetriever
danışmaya devam ediyor. Özel formatlara ilişkin meta verileri döndürmek için Android 10 Media Extractor'ı kullanın.MediaProvider,
image/*
dosyalarında meta veriler içinExif
standartlaştırmaya devam ediyor. Herhangi bir özel görüntü formatı içinExif
meta verilerini ayıklamak ve döndürmek üzereandroid.media.ExifInterface
genişletebilirsiniz.
Depolama aygıtları indeksleme bayrağı. MediaProvider,
StorageManager.getStorageVolumes()
tarafından döndürülen tüm birimleri indeksler; buradaStorageVolume.getMediaStoreVolumeName()
null değildir. Neyin indekslendiğini etkilemek için döndürülen birimlerin listesini özelleştirebilirsiniz ancak geçici birimlerin (USB OTG sürücüleri gibi) dahil edilmesini tavsiye etmiyoruz.MTP yığınının değiştirilmesi. Android 11, MTP yığınını tamamen modül sınırları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 bileşenlerinin işlevselliğini doğrulamak için
MediaProviderTests
içindeki testleri kullanın.
Her iki test kümesini birlikte çalıştırmak için aşağıdaki atest
komutunu kullanın:
atest --test-mapping packages/providers/MediaProvider