โมดูล MediaProvider เพิ่มประสิทธิภาพข้อมูลเมตาที่มีการจัดทำดัชนี (เสียง วิดีโอ และรูปภาพจากการ์ด SD และอุปกรณ์ USB) และทำให้ข้อมูลนั้นพร้อมใช้งานกับแอปผ่าน API สาธารณะของ MediaStore โมดูล 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_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หากต้องการตรวจสอบว่า 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