MediaProvider modülü

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 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 ilgili veriler döndürülüyor (aracılığıyla) MediaMetadataRetriever) ve image/* 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 ve QUERY_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() ve createWriteRequest().

    • Hızlı bir şekilde kullanılacak yeni GENERATION_ADDED ve GENERATION_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çin SystemUI ü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ç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 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/* ve audio/* dosyaları için danışmanlık yapmaya devam ediyor MediaMetadataRetriever. Geri dönmek için Android 10 Medya Ayıklayıcıları kullanma meta verileri içerir.

    • MediaProvider, image/* dosyaları için Exif üzerinde standartlaştırmaya devam ediyor: meta verilerdir. 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() null olmadığında StorageManager.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