MediaProvider modülü

MediaProvider modülü, dizine eklenen meta verileri (ses, video ve resimler) optimize eder SD kartlardan ve USB cihazlarından) sağlar ve bu verileri MediaStore herkese açık API'ler. 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. Bu modül güncellenebilir ve Android'in güvenlik sorunlarına daha hızlı yanıt vermesini sağlar. (hassas kullanıcı verilerini güvende tutma) ve yeni medya biçimlerini daha hızlı ekleme (hem kullanıcılara hem de geliştiricilere tutarlılık sağlar).

Android 10'daki değişiklikler

Android 10'da, kötü amaçlı yazılım algılama ve dışa aktarma işlemiyle ilgili verileri, ö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, birer resim olduğu için ilgili izinlere sahip olursunuz.

  • MIME türünü yalnızca dosya uzantısını kullanarak (ve içerik algılama ).

  • upstream Debian Linux ve Android eşleme öğeleri için de kullanılabilir.

  • 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 aşağıdaki iyileştirmelerle yapılan değişiklikler:

  • 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 verileri dizine ekleniyor.

    • 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 MediaProvider'ı özelleştirebilirsiniz. dizine eklenmesi gereken depolama cihazlarını işaretlemek ve hatta MTP'nin yerine geçer yığını. Ayrıntılar için Özelleştirme bölümüne bakın.

Modül sınırı

Android 11, packages/providers/MediaProvider itibarıyla yeni bir konuma (önemli istisna dışında) mantığıyla ilgilidir. Ayrıca, frameworks/base/core/java/android/provider/MediaStore.java artık şu sitenin içinde: packages/providers/MediaProvider üzerinde modül sını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 özel bir depolama cihazı grubunu (ör. SD kart yuvası ve USB bağlantı noktası) içeriyorsa StorageManagerService uygulamasında VolumeInfo.MOUNT_FLAG_INDEXABLE işareti.

  • Özel (AOSP olmayan) bir MTP uygulaması kullanırken, sağlamak için yalnızca herkese açık API'lere ve sistem API'lerine ihtiyaç duyar. ve MediaStore ile etkileşime geçmeleri gerekir.

Özelleştirme

Artık yeni medya biçimleri ekleyebilir, dizine eklenen depolama cihazlarını etkileyebilir, ve MTP yığınını değiştirin.

  • Özel medya biçimleri. Her yeni özel medya biçimi için bir eşleme yöntemini kullanabilirsiniz. Yalnızca IANA tescil belgesinin işlemi hakkında daha fazla bilgi edinin.

    • 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. Ayıklayıp geri dönmek için android.media.ExifInterface öğesini uzatabilirsiniz Tüm özel resim biçimleri için Exif meta verileri.

  • Depolama cihazlarını dizine ekleme işareti. MediaProvider, döndürülen tüm birimleri dizine ekler StorageManager.getStorageVolumes() ölçütüne göre, burada StorageVolume.getMediaStoreVolumeName(), null değildir. 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ı değişimi. Android 11 MTP'yi yerleştirir gösterir ve bu sinyallere, arka uçta tutarlı olarak ve herkese açık API'ler.

Test

MediaProvider'ın işlevselliğini aşağıdaki testleri kullanarak doğrulayabilirsiniz:

  • MediaStore herkese açık API'lerinin işlevselliğini doğrulamak için şuradaki testleri kullanın: CtsProviderTestCases paketine (Android Compatibility Test Suite - CTS) erişebilirsiniz.

  • MediaProvider dahililerinin işlevselliğini doğrulamak için MediaProviderTests

Her iki test grubunu birlikte çalıştırmak için aşağıdaki atest komutunu kullanın:

atest --test-mapping packages/providers/MediaProvider