מודול MediaProvider

מודול MediaProvider מייעל מטא נתונים שנוספו לאינדקס (אודיו, וידאו ותמונות מכרטיסי SD והתקני USB) והופך את הנתונים האלה לזמינים לאפליקציות דרך ממשקי ה- API הציבוריים של MediaStore . כדי לשמור על פרטיות המשתמש, מודול MediaProvider אוכף את מודל אבטחת האחסון בהיקף שהוצג באנדרואיד 10, הכולל עיבוד מטא נתונים של מיקום רגיש. מודול זה ניתן לעדכון, ומאפשר לאנדרואיד להגיב מהר יותר לבעיות אבטחה (שמירה על הגנה על נתוני משתמש רגישים) ולהוסיף פורמטי מדיה חדשים מהר יותר (לספק עקביות הן למשתמשים והן למפתחים).

שינויים באנדרואיד 10

אנדרואיד 10 הציגה מספר שיפורים הקשורים לזיהוי וחילוץ נתונים מקובצי מדיה, במיוחד:

  • קביעת סוג תוכן הקובץ באמצעות החלק הראשון של סוג MIME של קובץ. לדוגמה, מערכת ההפעלה יודעת שגם image/png וגם image/x-newly-invented-format הם תמונות, ובכך יכולים לתאר במדויק הרשאות רלוונטיות למשתמש הקצה.

  • קביעת סוג MIME באמצעות סיומת הקובץ בלבד (וללא שימוש בהרחת תוכן כדי למנוע בעיות אבטחה).

  • קביעת סוג MIME של קובץ שרירותי באמצעות שילוב של מיפויים של Debian Linux ו-Android במעלה הזרם .

  • החזרת נתונים רלוונטיים מקבצי video/* audio/* (דרך MediaMetadataRetriever ) וקבצי image/* (דרך ExifInterface ).

שינויים באנדרואיד 11

באנדרואיד 11, מודול MediaProvider מתבסס על השינויים שבוצעו באנדרואיד 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. לפרטים, ראה התאמה אישית .

גבול מודול

אנדרואיד 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 . השתמש ב-Android 10 Media Extractors כדי להחזיר מטא נתונים עבור פורמטים מותאמים אישית.

    • עבור קבצי image/* , MediaProvider ממשיך לתקן ב- Exif עבור מטא נתונים. אתה יכול להרחיב android.media.ExifInterface כדי לחלץ ולהחזיר מטא נתונים Exif עבור כל פורמט תמונה מותאם אישית.

  • דגל אינדקס של התקני אחסון. MediaProvider מוסיף לאינדקס את כל אמצעי האחסון המוחזרים על ידי StorageManager.getStorageVolumes() כאשר StorageVolume.getMediaStoreVolumeName() אינו ריק. אתה יכול להתאים אישית את רשימת אמצעי האחסון המוחזרים כדי להשפיע על מה שנוסף לאינדקס, אך אנו ממליצים שלא לכלול אמצעי אחסון חולפים (כגון כונני USB OTG).

  • החלפת מחסנית MTP. אנדרואיד 11 ממקמת את מחסנית ה-MTP לגמרי מחוץ לגבול המודול ומבטיחה שהיא פועלת נגד ממשקי API ציבוריים.

בדיקה

אתה יכול לאמת את הפונקציונליות של MediaProvider באמצעות הבדיקות הבאות:

  • כדי לאמת את הפונקציונליות של ממשקי API ציבוריים של MediaStore, השתמש בבדיקות בחבילת CtsProviderTestCases של חבילת Android Compatibility Test Suite (CTS).

  • כדי לאמת את הפונקציונליות של התכנים הפנימיים של MediaProvider, השתמש בבדיקות ב- MediaProviderTests .

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

atest --test-mapping packages/providers/MediaProvider