โมดูล MediaProvider จะเพิ่มประสิทธิภาพข้อมูลเมตาที่จัดทําดัชนี (เสียง วิดีโอ และรูปภาพจากการ์ด SD และอุปกรณ์ USB) และทําให้แอปเข้าถึงข้อมูลดังกล่าวได้ผ่าน MediaStore public 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 จะจัดทำดัชนีข้อมูลเมตาโดยทำการปรับยอดข้อมูลเมตาที่มีอยู่กับ MediaStore Public API การเปลี่ยนแปลงดังกล่าวได้แก่
คอลัมน์
is_favorite
ใหม่และอาร์กิวเมนต์QUERY_ARG_MATCH_FAVORITE
เพื่อช่วยให้แอปสไตล์แกลเลอรีกรองสื่อตามคอลัมน์นี้ได้อย่างรวดเร็วการจัดทําดัชนีข้อมูลเมตาของพื้นที่สี
คอลัมน์ "is_trashed" ใหม่และอาร์กิวเมนต์
QUERY_ARG_MATCH_TRASHED
เพื่อเปิดใช้แอปสไตล์แกลเลอรีในการกรองตามคอลัมน์นี้API ใหม่ที่ช่วยให้แก้ไขรายการหลายรายการพร้อมกันได้โดยใช้พรอมต์กล่องโต้ตอบของผู้ใช้รายการเดียว ซึ่งได้แก่
createDeleteRequest()
,createFavoriteRequest()
,createTrashRequest()
และcreateWriteRequest()
คอลัมน์
GENERATION_ADDED
และGENERATION_MODIFIED
ใหม่สำหรับใช้ในการตรวจหาการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่จุดซิงค์ก่อนหน้าได้อย่างรวดเร็วและเชื่อถือได้GROUP BY
API สาธารณะใหม่สําหรับใช้กับคอลัมน์ข้อมูลเมตาเพิ่มเติมที่ไม่ได้กล่าวถึงข้างต้น
การปรับปรุง
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
Dependency ของ MediaProvider เกี่ยวข้องกับการปรับแต่ง (กล่าวคือ หากคุณปรับแต่ง MediaProvider คุณต้องตรวจสอบว่าการติดตั้งใช้งานเป็นไปตาม Dependency ที่เชื่อมโยงกับการปรับแต่งของคุณ)
เมื่อใช้รูปแบบไฟล์สื่อที่กำหนดเองหรือไม่เป็นมาตรฐาน (เช่น รูปแบบที่สร้างขึ้นโดยแอปกล้องเฉพาะของผู้ให้บริการ) คุณต้องลงทะเบียนรูปแบบที่กำหนดเองแต่ละรูปแบบกับ
MimeUtils
และข้อบังคับของ Media Extractor เพื่อเปิดใช้การจัดทําดัชนีโดย MediaProviderตั้งค่า Flag
VolumeInfo.MOUNT_FLAG_INDEXABLE
เพื่อให้ MediaProvider จัดทําดัชนีชุดอุปกรณ์เก็บข้อมูลที่กําหนดเอง (เช่น ช่องการ์ด SD และพอร์ต USB) ที่ใช้กับการติดตั้งใช้งานStorageManagerService
เมื่อใช้การติดตั้งใช้งาน MTP ที่กําหนดเอง (ไม่ใช่ AOSP) ให้ตรวจสอบว่าการติดตั้งใช้งานใช้ API สาธารณะและ API ของระบบเพียงอย่างเดียวเพื่อให้การติดตั้งใช้งานโต้ตอบกับ MediaStore ได้
การปรับแต่ง
ตอนนี้คุณสามารถเพิ่มรูปแบบสื่อใหม่ กำหนดอุปกรณ์เก็บข้อมูลที่จะให้จัดทําดัชนี และแทนที่กอง MTP ได้แล้ว
รูปแบบสื่อที่กำหนดเอง สำหรับรูปแบบสื่อที่กำหนดเองใหม่แต่ละรูปแบบ คุณต้องระบุการแมปจากนามสกุลไฟล์ที่ไม่ซ้ำกันกับประเภท MIME เราขอแนะนําอย่างยิ่งให้คุณทําตามกระบวนการจดทะเบียน IANA
คุณไม่สามารถกำหนดนามสกุลหรือประเภท MIME ซ้ำซึ่งกำหนดไว้ใน AOSP อยู่แล้ว
สำหรับไฟล์
video/*
และaudio/*
ทาง MediaProvider จะยังคงให้คำปรึกษาต่อไปMediaMetadataRetriever
ใช้เครื่องมือแยกสื่อของ Android 10 เพื่อแสดงข้อมูลเมตาสำหรับรูปแบบที่กำหนดเองสำหรับไฟล์
image/*
นั้น MediaProvider จะยังคงใช้Exif
เป็นมาตรฐานสำหรับข้อมูลเมตา คุณสามารถขยายandroid.media.ExifInterface
เพื่อดึงข้อมูลและแสดงผลข้อมูลเมตาExif
สำหรับรูปแบบรูปภาพที่กำหนดเองได้
Flag การจัดทําดัชนีอุปกรณ์จัดเก็บข้อมูล MediaProvider จะจัดทำดัชนีสำหรับทุกเล่มที่
StorageManager.getStorageVolumes()
แสดงผล โดยที่StorageVolume.getMediaStoreVolumeName()
ไม่ใช่ค่าว่าง คุณปรับแต่งรายการวอลุ่มที่แสดงผลเพื่อกำหนดสิ่งที่จะจัดทำดัชนีได้ แต่เราไม่แนะนำให้รวมวอลุ่มชั่วคราว (เช่น ไดรฟ์ USB OTG)การเปลี่ยนสแต็ก MTP Android 11 จะวางกอง MTP ไว้นอกขอบเขตของโมดูลทั้งหมด และตรวจสอบว่าทำงานกับ API สาธารณะได้
การทดสอบ
คุณสามารถยืนยันฟังก์ชันการทำงานของ MediaProvider โดยใช้การทดสอบต่อไปนี้
หากต้องการยืนยันฟังก์ชันการทำงานของ MediaStore Public API ให้ใช้การทดสอบในแพ็กเกจ
CtsProviderTestCases
ของชุดเครื่องมือทดสอบความเข้ากันได้ของ Android (CTS)หากต้องการยืนยันฟังก์ชันการทํางานของ MediaProvider ภายใน ให้ใช้การทดสอบใน
MediaProviderTests
หากต้องการเรียกใช้การทดสอบทั้ง 2 ชุดพร้อมกัน ให้ใช้คำสั่ง atest
ต่อไปนี้
atest --test-mapping packages/providers/MediaProvider