המודול MediaProvider מבצע אופטימיזציה של מטא-נתונים שנוספו לאינדקס (אודיו, וידאו ותמונות מכרטיסי SD ומהתקני USB), ומאפשר לאפליקציות לגשת לנתונים האלה דרך ממשקי ה-API הציבוריים של MediaStore. כדי לשמור על פרטיות המשתמשים, המודול MediaProvider אוכף את נפח האחסון בהיקף אבטחה מודל שהושקה ב-Android 10, כולל צנזור מטא-נתונים רגישים של מיקום. אפשר לעדכן את המודול הזה, וכך לאפשר ל-Android להגיב מהר יותר לבעיות אבטחה (שמירה על הגנה על נתונים רגישים של משתמשים) ולהוסיף פורמטים חדשים של מדיה מהר יותר (שמירה על עקביות למשתמשים ולמפתחים).
שינויים ב-Android 10
ב-Android 10 נוספו כמה שיפורים שקשורים לזיהוי ולחילוץ נתונים מקובצי מדיה, באופן ספציפי:
קביעת סוג התוכן של הקובץ באמצעות החלק הראשון של סוג ה-MIME של הקובץ. לדוגמה, מערכת ההפעלה יודעת שגם
image/png
וגםimage/x-newly-invented-format
הן תמונות, ולכן היא יכולה לתאר במדויק את ההרשאות הרלוונטיות למשתמש הקצה.זיהוי סוג ה-MIME באמצעות סיומת הקובץ בלבד (וללא שימוש בניפוי תוכן כדי למנוע בעיות אבטחה).
קביעת סוג ה-MIME של קובץ שרירותי באמצעות שילוב של upstream ב-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.
יחסי תלות
יחסי התלות של MediaProvider קשורים להתאמות אישיות (כלומר אם מבצעים התאמה אישית של MediaProvider, צריך לוודא שההטמעה עומדת בדרישות ותלויות בהתאמה האישית שלך).
כשמשתמשים בפורמטים מותאמים אישית או לא סטנדרטיים של קובצי מדיה (לדוגמה, פורמט שנוצר על ידי אפליקציית מצלמה ספציפית לספק), צריך לרשום כל פורמט מותאם אישית ב-
MimeUtils
ובמודול Media Extractor כדי לאפשר הוספה לאינדקס על ידי MediaProvider.כדי לוודא ש-MediaProvider יוסיף לאינדקס קבוצה מותאמת אישית של התקני אחסון (כמו כרטיס SD) חריצים ויציאות USB) שנעשה בהם שימוש בהטמעה של
StorageManagerService
, צריך להגדיר דגלVolumeInfo.MOUNT_FLAG_INDEXABLE
.כשמשתמשים בהטמעת MTP בהתאמה אישית (לא AOSP), צריך לוודא שההטמעה מסתמכת אך ורק על ממשקי API ציבוריים והמערכת כדי לאפשר את ההטמעה ליצור אינטראקציה עם MediaStore.
התאמה אישית
עכשיו אפשר להוסיף פורמטים חדשים של מדיה, להשפיע על מכשירי האחסון שיתווספו לאינדקס ולהחליף את מחסנית ה-MTP.
פורמטים מותאמים אישית של מדיה. עבור כל פורמט מותאם אישית חדש של מדיה, עליך לספק מסיומת הקובץ הייחודית לסוג MIME. מומלץ מאוד עליך לעקוב אחר רישום IANA התהליך.
אי אפשר להגדיר מחדש תוסף או סוג MIME שכבר מוגדרים ב-AOSP.
לגבי קבצים מסוג
video/*
ו-audio/*
, MediaProvider ממשיך להתייעץ עםMediaMetadataRetriever
. שימוש ב-Media Extractors של Android 10 כדי להחזיר מטא-נתונים לפורמטים מותאמים אישית.ב-
image/*
קבצים, MediaProvider ממשיך לבצע סטנדרטיזציה שלExif
למשך מטא-נתונים. אפשר להרחיב אתandroid.media.ExifInterface
כדי לחלץ ולהחזיר מטא-נתוניםExif
לכל הפורמטים של התמונות בהתאמה אישית.
סימון הוספה לאינדקס של מכשירי אחסון. MediaProvider יוצר אינדקס של כל הנפחים שהוחזרו מאת
StorageManager.getStorageVolumes()
, כאשר הערך שלStorageVolume.getMediaStoreVolumeName()
אינו null. אפשר להתאים אישית את רשימת כרכים שהוחזרו כדי להשפיע על הפריטים שנוספים לאינדקס, אבל לא מומלץ כולל נפחי אחסון זמניים (כמו כונני USB OTG).החלפת סטאק MTP ב-Android 11, סטאק ה-MTP ממוקם מחוץ לגבולות המודול, ומוודא שהוא פועל עם ממשקי API ציבוריים.
בדיקה
אפשר לאמת את הפונקציונליות של MediaProvider באמצעות הבדיקות הבאות:
כדי לאמת את הפונקציונליות של ממשקי ה-API הציבוריים של MediaStore, משתמשים בבדיקות בחבילה
CtsProviderTestCases
של Android Compatibility Test Suite (CTS).כדי לאמת את הפונקציונליות של MediaProvider פנימי, צריך להשתמש בבדיקות
MediaProviderTests
כדי להריץ את שתי קבוצות הבדיקות יחד, משתמשים בפקודה הבאה של atest
:
atest --test-mapping packages/providers/MediaProvider