โมดูล 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
สำหรับรูปแบบรูปภาพที่กำหนดเองได้
การแจ้งการจัดทำดัชนีอุปกรณ์พื้นที่เก็บข้อมูล 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