โมดูล 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
สำหรับใช้ในการตรวจหาการเปลี่ยนแปลงที่เกิดขึ้นตั้งแต่จุดซิงค์ก่อนหน้าได้อย่างรวดเร็ว และเชื่อถือได้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 ใน 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 เพื่อแสดงข้อมูลเมตาสำหรับรูปแบบที่กำหนดเองสำหรับไฟล์
image/*
MediaProvider จะยังคงใช้Exif
เป็นมาตรฐานสำหรับ ข้อมูลเมตา คุณสามารถขยายandroid.media.ExifInterface
เพื่อดึงและแสดงผลข้อมูลเมตาExif
สำหรับรูปแบบรูปภาพที่กำหนดเองได้
แฟล็กการจัดทำดัชนีอุปกรณ์จัดเก็บข้อมูล MediaProvider จะจัดทำดัชนีไดรฟ์ข้อมูลทั้งหมดที่
StorageManager.getStorageVolumes()
ส่งคืน โดยที่StorageVolume.getMediaStoreVolumeName()
ไม่ใช่ค่าว่าง คุณปรับแต่งรายการโวลุ่มที่แสดงผลเพื่อกำหนดสิ่งที่จัดทำดัชนีได้ แต่เราไม่แนะนำให้รวมโวลุ่มชั่วคราว (เช่น ไดรฟ์ USB OTG)การแทนที่สแต็ก MTP Android 11 จะวางสแต็ก MTP ไว้นอกขอบเขตของโมดูลทั้งหมด และตรวจสอบว่าสแต็กทำงานกับ API สาธารณะ
การทดสอบ
คุณตรวจสอบฟังก์ชันการทำงานของ MediaProvider ได้โดยใช้การทดสอบต่อไปนี้
หากต้องการยืนยันฟังก์ชันการทำงานของ API สาธารณะ MediaStore ให้ใช้การทดสอบใน
CtsProviderTestCases
แพ็กเกจของชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) ของ Androidหากต้องการยืนยันฟังก์ชันการทำงานของส่วนประกอบภายในของ MediaProvider ให้ใช้การทดสอบใน
MediaProviderTests
หากต้องการเรียกใช้การทดสอบทั้ง 2 ชุดพร้อมกัน ให้ใช้คำสั่ง atest
ต่อไปนี้
atest --test-mapping packages/providers/MediaProvider