מודול MediaProvider

מודול MediaProvider מבצע אופטימיזציה של מטא-נתונים שנוספו לאינדקס (אודיו, וידאו ותמונות). מכרטיסי SD והתקני USB), והנתונים יהיו זמינים לאפליקציות באמצעות MediaStore ציבורי ממשקי API. כדי לשמור על פרטיות המשתמשים, המודול 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. In addition, frameworks/base/core/java/android/provider/MediaStore.java נמצא עכשיו בתוך גבול המודול בpackages/providers/MediaProvider.

פורמט החבילה

מודול MediaProvider הוא בפורמט APK-in-APEX.

יחסי תלות

יחסי התלות של MediaProvider קשורים להתאמות אישיות (כלומר אם מבצעים התאמה אישית של MediaProvider, צריך לוודא שההטמעה עומדת בדרישות ותלויות בהתאמה האישית שלך).

  • כשמשתמשים בפורמטים מותאמים אישית או לא סטנדרטיים של קובצי מדיה (לדוגמה, שנוצרה על ידי אפליקציית מצלמה ספציפית לספק), עליכם לרשום כל אפליקציה בפורמט MimeUtils והמודול חילוץ מדיה כדי להפעיל הוספה לאינדקס באמצעות MediaProvider.

  • כדי לוודא ש-MediaProvider יוסיף לאינדקס קבוצה מותאמת אישית של התקני אחסון (כמו כרטיס SD) חריצים ויציאות USB) שנעשה בהם שימוש בהטמעה של StorageManagerService, צריך להגדיר דגל VolumeInfo.MOUNT_FLAG_INDEXABLE.

  • כשמשתמשים בהטמעת MTP בהתאמה אישית (לא AOSP), צריך לוודא שההטמעה מסתמכת אך ורק על ממשקי API ציבוריים והמערכת כדי לאפשר את ההטמעה ליצור אינטראקציה עם MediaStore.

התאמה אישית

עכשיו אפשר להוסיף פורמטים חדשים של מדיה, להשפיע על מכשירי האחסון שיתווספו לאינדקס, ומחליפים את סטאק ה-MDP.

  • פורמטים מותאמים אישית של מדיה. עבור כל פורמט מותאם אישית חדש של מדיה, עליך לספק מסיומת הקובץ הייחודית לסוג MIME. מומלץ מאוד עליך לעקוב אחר רישום IANA התהליך.

    • אי אפשר להגדיר מחדש תוסף או סוג MIME שכבר מוגדרים ב-AOSP.

    • לגבי קבצים מסוג video/* ו-audio/*, MediaProvider ממשיך לייעוץ MediaMetadataRetriever. כדי לחזור, צריך להשתמש בכלי לחילוץ מדיה של 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 (CTS).

  • כדי לאמת את הפונקציונליות של MediaProvider פנימי, צריך להשתמש בבדיקות MediaProviderTests

כדי להריץ את שתי קבוצות הבדיקות יחד, משתמשים בפקודה atest הבאה:

atest --test-mapping packages/providers/MediaProvider