โมดูล MediaProvider ช่วยเพิ่มประสิทธิภาพข้อมูลเมตาที่มีการจัดทำดัชนี (เสียง วิดีโอ และรูปภาพ จากการ์ด SD และอุปกรณ์ USB) และทำให้ข้อมูลพร้อมใช้งานสำหรับแอปผ่าน MediaStore สาธารณะ API โมดูล MediaProvider บังคับใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต เพื่อรักษาความเป็นส่วนตัวของผู้ใช้ ความปลอดภัย โมเดล เปิดตัวใน Android 10 ซึ่งรวมถึงการปรับปรุงข้อมูลเมตาตำแหน่งที่ละเอียดอ่อน โมดูลนี้อัปเดตได้ ทำให้ Android ตอบสนองต่อปัญหาด้านความปลอดภัยได้เร็วขึ้น (ปกป้องข้อมูลที่ละเอียดอ่อนของผู้ใช้) และเพิ่มรูปแบบสื่อใหม่ๆ ได้เร็วขึ้น (ให้ความสอดคล้องทั้งกับผู้ใช้และนักพัฒนาซอฟต์แวร์)
การเปลี่ยนแปลงใน Android 10
Android 10 มีการปรับปรุงหลายอย่างที่เกี่ยวข้องกับการระบุและการดึงข้อมูล จากไฟล์สื่อโดยเฉพาะ:
การกำหนดประเภทเนื้อหาไฟล์โดยใช้ส่วนแรกของประเภท MIME ของไฟล์ ตัวอย่างเช่น ระบบปฏิบัติการรู้ว่าทั้ง
image/png
และimage/x-newly-invented-format
คือรูปภาพ ซึ่งจึงสามารถอธิบายได้อย่างถูกต้อง สิทธิ์ที่เกี่ยวข้องกับผู้ใช้ปลายทางการกำหนดประเภท MIME โดยใช้นามสกุลไฟล์เท่านั้น (และโดยไม่ใช้ การดักจับเนื้อหา เพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัย)
การกำหนดประเภท MIME ของไฟล์ที่กำหนดเองโดยใช้ชุดค่าผสมของ อัปสตรีม Debian Linux และ Android การแมป
แสดงข้อมูลที่เกี่ยวข้องจาก
video/*
และaudio/*
ไฟล์ (ผ่านMediaMetadataRetriever
) และimage/*
ไฟล์ (ผ่านExifInterface
)
การเปลี่ยนแปลงใน Android 11
ใน Android 11 โมดูล MediaProvider สร้างขึ้นจาก การเปลี่ยนแปลงใน Android 10 ที่มีการปรับปรุงดังต่อไปนี้
การปรับปรุงการจัดทำดัชนี ตอนนี้โมดูล MediaProvider จัดทำดัชนีข้อมูลเมตาตาม การปรับยอดข้อมูลเมตาที่มีอยู่กับ API สาธารณะของ MediaStore การเปลี่ยนแปลง รวมข้อมูลต่อไปนี้
คอลัมน์
is_favorite
ใหม่และอาร์กิวเมนต์QUERY_ARG_MATCH_FAVORITE
เพื่อเปิดใช้ แอปแบบแกลเลอรีรูปภาพเพื่อกรองสื่ออย่างรวดเร็วโดยอิงตามคอลัมน์นี้การจัดทำดัชนีข้อมูลเมตาของพื้นที่สี
"is_trashes" ใหม่ และอาร์กิวเมนต์
QUERY_ARG_MATCH_TRASHED
เพื่อเปิดใช้ แอปแบบแกลเลอรีรูปภาพที่จะกรองตามคอลัมน์นี้API ใหม่ที่ให้คุณแก้ไขหลายรายการแบบเป็นกลุ่มได้ด้วยผู้ใช้รายเดียว กล่องโต้ตอบ รวมทั้ง
createDeleteRequest()
,createFavoriteRequest()
createTrashRequest()
และcreateWriteRequest()
คอลัมน์
GENERATION_ADDED
และGENERATION_MODIFIED
ใหม่สำหรับการใช้งานอย่างรวดเร็ว และสามารถตรวจจับการเปลี่ยนแปลง ที่เกิดขึ้นหลังจาก จุดซิงค์API สาธารณะ
GROUP BY
ใหม่เพื่อใช้กับคอลัมน์ข้อมูลเมตาเพิ่มเติมที่ไม่ได้ใช้กับ ที่กล่าวถึงข้างต้น
การปรับปรุง
ExifInterface
เพื่อดึงข้อมูลเมตาจาก PNG และ WebP คอนเทนเนอร์การปรับปรุง
SystemUI
เพื่อเขียนข้อมูลเมตาDateTimeOriginal
ในหน้าจอ การจับภาพ
นอกจากนี้ คุณยังปรับแต่ง MediaProvider ได้ด้วยการเพิ่มรูปแบบสื่อใหม่ๆ ทำเครื่องหมายอุปกรณ์จัดเก็บข้อมูลที่ควรจัดทำดัชนี หรือแม้กระทั่งแทนที่ MTP สแต็ก โปรดดูรายละเอียดที่หัวข้อการปรับแต่ง
ขอบเขตโมดูล
Android 11 จะย้ายโค้ดทั้งหมดใน
packages/providers/MediaProvider
ไปยังตำแหน่งใหม่ โดยมีข้อยกเว้นที่ชัดเจน
ของตรรกะเกี่ยวกับ MTP นอกจากนี้
ขณะนี้ frameworks/base/core/java/android/provider/MediaStore.java
อยู่ภายใน
ขอบเขตของโมดูลที่ packages/providers/MediaProvider
รูปแบบแพ็กเกจ
โมดูล MediaProvider อยู่ในรูปแบบ APK-in-APEX
การขึ้นต่อกัน
ทรัพยากร Dependency ของ MediaProvider นั้นเกี่ยวข้องกับการปรับแต่ง (ที่ หากคุณปรับแต่ง MediaProvider คุณต้องตรวจสอบว่าการติดตั้งใช้งานเป็นไปตาม ทรัพยากร Dependency ที่เกี่ยวข้องกับการปรับแต่งของคุณ)
เมื่อใช้รูปแบบไฟล์สื่อที่กำหนดเองหรือที่ไม่เป็นไปตามมาตรฐาน (เช่น รูปแบบ ที่สร้างโดยแอปกล้องถ่ายรูปเฉพาะผู้ให้บริการ) คุณจะต้องลงทะเบียน ด้วย
MimeUtils
และโมดูล Media Extractor เพื่อเปิดใช้การจัดทำดัชนีโดย MediaProviderเพื่อให้ MediaProvider จัดทำดัชนีชุดอุปกรณ์จัดเก็บข้อมูลที่กำหนดเอง (การ์ด SD ดังกล่าว) สล็อตและพอร์ต USB) ที่ใช้ในการใช้งาน
StorageManagerService
ให้ตั้งค่า การแจ้งว่าไม่เหมาะสมVolumeInfo.MOUNT_FLAG_INDEXABLE
เมื่อใช้การใช้งาน MTP ที่กำหนดเอง (ไม่ใช่ AOSP) โปรดตรวจสอบว่าการใช้งาน ใช้ API สาธารณะและ API ของระบบเพียงอย่างเดียวเพื่อให้การใช้งาน โต้ตอบกับ MediaStore
การปรับแต่ง
ตอนนี้คุณสามารถเพิ่มรูปแบบสื่อใหม่ๆ กำหนดว่าจะให้อุปกรณ์เก็บข้อมูลใดจัดทำดัชนีแล้ว และแทนที่สแต็ก MTP
รูปแบบสื่อที่กำหนดเอง สำหรับรูปแบบสื่อที่กำหนดเองใหม่แต่ละรูปแบบ คุณต้องให้ จากนามสกุลไฟล์ที่ไม่ซ้ำกันไปยังประเภท MIME เราขอแนะนำเป็นอย่างยิ่ง คุณต้องปฏิบัติตามการลงทะเบียนของ IANA กระบวนการ
คุณไม่สามารถกำหนดส่วนขยายหรือประเภท MIME ที่กำหนดใน AOSP แล้วใหม่ได้
สำหรับไฟล์
video/*
และaudio/*
MediaProvider จะให้คำปรึกษาต่อไปMediaMetadataRetriever
ใช้ Android 10 Media Extractor เพื่อย้อนกลับ ข้อมูลเมตาสำหรับรูปแบบที่กำหนดเองสำหรับไฟล์
image/*
MediaProvider ยังคงรักษามาตรฐานเดิมไว้ที่Exif
สำหรับ ข้อมูลเมตา คุณสามารถขยายandroid.media.ExifInterface
เพื่อดึงข้อมูลและส่งกลับ ข้อมูลเมตาExif
สำหรับรูปแบบรูปภาพที่กำหนดเองทั้งหมด
การแจ้งการจัดทำดัชนีอุปกรณ์พื้นที่เก็บข้อมูล MediaProvider จัดทำดัชนีวอลุ่มทั้งหมดที่แสดงผล โดย
StorageManager.getStorageVolumes()
โดยที่StorageVolume.getMediaStoreVolumeName()
เป็นค่าว่าง คุณสามารถปรับแต่ง รายการปริมาณที่กลับมามีผลต่อสิ่งที่จัดทำดัชนี แต่เราไม่แนะนำให้ รวมถึงระดับเสียงชั่วคราว (เช่น ไดรฟ์ USB OTG)การแทนที่สแต็ก MTP Android 11 วาง MTP ซ้อนอยู่นอกขอบเขตของโมดูลและตรวจสอบว่าทำงานได้ API สาธารณะ
การทดสอบ
คุณยืนยันฟังก์ชันการทำงานของ MediaProvider ได้โดยใช้การทดสอบต่อไปนี้
หากต้องการยืนยันฟังก์ชันการทำงานของ MediaStore API สาธารณะ ให้ใช้การทดสอบใน แพ็กเกจ
CtsProviderTestCases
ของชุดทดสอบความเข้ากันได้ของ Android (CTS)หากต้องการยืนยันฟังก์ชันการทำงานของ MediaProvider ภายใน ให้ใช้การทดสอบใน
MediaProviderTests
หากต้องการเรียกใช้การทดสอบทั้ง 2 ชุดพร้อมกัน ให้ใช้คำสั่ง atest
ต่อไปนี้
atest --test-mapping packages/providers/MediaProvider