โมดูล 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
ใหม่สำหรับการใช้งานอย่างรวดเร็ว และสามารถตรวจจับการเปลี่ยนแปลง ที่เกิดขึ้นหลังจาก จุดซิงค์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ตั้งค่า 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 Media Extractor เพื่อย้อนกลับ ข้อมูลเมตาสำหรับรูปแบบที่กำหนดเองสำหรับไฟล์
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