עדכונים לאחסון ב-Android 11

‫Android 11 (API ברמה 30) משפרת עוד יותר את הפלטפורמה, ומספקת הגנה טובה יותר לנתוני האפליקציות והמשתמשים באחסון חיצוני. במהדורה הזו הוספנו כמה שיפורים, כמו גישה לנתיב של קובץ גולמי, פעולות עריכה של קבוצת קבצים למדיה וממשק משתמש מעודכן ל-Storage Access Framework.

בנוסף, בגרסה הזו יש שיפורים באחסון בהיקף מוגבל, שמאפשרים למפתחים למלא בקלות רבה יותר את תרחישי השימוש באחסון אחרי שהם עוברים לשימוש במודל האחסון הזה.

אכיפה של נפח אחסון ייעודי לאפליקציות

אפליקציות שפועלות ב-Android 11 אבל מטרגטות ל-Android 10 (רמת API‏ 29) עדיין יכולות לבקש את המאפיין requestLegacyExternalStorage. הדגל הזה מאפשר לאפליקציות להשבית באופן זמני את השינויים שקשורים לאחסון בהיקף מוגבל, כמו מתן גישה לספריות שונות ולסוגים שונים של קובצי מדיה. אחרי שמעדכנים את האפליקציה כך שתכוון ל-Android 11, המערכת מתעלמת מהסימן requestLegacyExternalStorage.

שמירה על תאימות ל-Android 10

אם האפליקציה שלכם לא משתמשת באחסון מוגבל בהיקף כשהיא פועלת במכשירי Android 10, מומלץ להמשיך להגדיר את requestLegacyExternalStorage ל-true בקובץ המניפסט של האפליקציה. כך האפליקציה תמשיך לפעול כצפוי במכשירים עם Android 10.

העברת נתונים לספריות שגלויות כשמשתמשים באחסון בהיקף מוגבל

אם האפליקציה שלכם משתמשת במודל אחסון מדור קודם והיא כוונה בעבר ל-Android 10 או לגרסה מוקדמת יותר, יכול להיות שאתם מאחסנים נתונים בספרייה שהאפליקציה לא יכולה לגשת אליה כשמודל האחסון המוגבל מופעל. לפני שמטרגטים את Android 11, צריך להעביר את הנתונים לספרייה שתואמת לאחסון בהיקף.

בדיקת נפח אחסון ייעודי לאפליקציות

כדי להפעיל אחסון בהיקף מוגבל באפליקציה, בלי קשר לגרסת ה-SDK של האפליקציה ולערכי הדגלים במניפסט, צריך להפעיל את דגלי התאימות הבאים של האפליקציה:

כדי להשבית את האחסון המוגבל ולהשתמש במודל האחסון הקודם, צריך לבטל את ההגדרה של שני הדגלים.

ניהול האחסון במכשיר

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

  1. כדי לבדוק אם יש נפח אחסון פנוי, מפעילים את פעולת הכוונה ACTION_MANAGE_STORAGE.
  2. אם אין מספיק מקום פנוי במכשיר, מבקשים מהמשתמש להעניק לאפליקציה הסכמה לניקוי כל מטמוני הנתונים. כדי לעשות זאת, מפעילים את פעולת הכוונה ACTION_CLEAR_APP_CACHE.

ספרייה ספציפית לאפליקציה באחסון חיצוני

החל מ-Android 11, אפליקציות לא יכולות ליצור ספרייה ספציפית לאפליקציה באחסון חיצוני. כדי לגשת לספרייה שהמערכת מספקת לאפליקציה, צריך להתקשר אל getExternalFilesDirs().

גישה לקובץ מדיה

כדי להקל על הגישה למדיה תוך שמירה על פרטיות המשתמשים, ב-Android 11 נוספו היכולות הבאות.

ביצוע פעולות בקבוצות

כדי לשמור על עקביות בין המכשירים ולשפר את נוחות השימוש, ב-Android 11 נוספו כמה שיטות שמאפשרות לנהל קבוצות של קובצי מדיה בקלות רבה יותר.

גישה לקבצים באמצעות נתיבי קבצים ישירים וספריות מקומיות

כדי לעזור לאפליקציה שלכם לפעול בצורה חלקה יותר עם ספריות מדיה של צד שלישי, ב-Android 11 אפשר להשתמש בממשקי API אחרים מלבד MediaStore API כדי לגשת לקובצי מדיה מאחסון משותף באמצעות נתיבי קבצים ישירים. ה-API האלה כוללים:

  • File API.
  • ספריות מקוריות, כמו fopen().

גישה לנתונים מאפליקציות אחרות

כדי להגן על פרטיות המשתמשים, במכשירים עם Android 11 ואילך, המערכת מגבילה עוד יותר את הגישה של האפליקציה לספריות פרטיות של אפליקציות אחרות.

גישה לספריות נתונים באחסון הפנימי

ב-Android 9 (רמת API‏ 28) התחילו להגביל את האפליקציות שיכולות להפוך את הקבצים בספריות הנתונים שלהן באחסון הפנימי לנגישים לכל האפליקציות. אפליקציות שמיועדות ל-Android 9 ואילך לא יכולות להגדיר את הקבצים בספריות הנתונים שלהן כנגישים לכולם.

ב-Android 11, ההגבלה הזו מורחבת. אם האפליקציה שלכם מטרגטת את Android 11, היא לא יכולה לגשת לקבצים בספריית הנתונים של אפליקציה אחרת, גם אם האפליקציה האחרת מטרגטת את Android 8.1 (רמת API‏ 27) או גרסה מוקדמת יותר, והקבצים בספריית הנתונים שלה הם בעלי הרשאת קריאה לכל העולם.

גישה לספריות ספציפיות לאפליקציות באחסון חיצוני

ב-Android 11, לאפליקציות אין יותר גישה לקבצים בכל תיקייה ייעודית וספציפית לאפליקציה של אפליקציה אחרת באחסון החיצוני.

הגבלות גישה למסמכים

כדי לתת למפתחים זמן לבדיקות, השינויים הבאים שקשורים ל-Storage Access Framework‏ (SAF) ייכנסו לתוקף רק אם האפליקציה שלכם מיועדת ל-Android 11 ומעלה.

גישה לספריות

אי אפשר יותר להשתמש בפעולת הכוונה ACTION_OPEN_DOCUMENT_TREE כדי לבקש גישה לספריות הבאות:

  • ספריית הבסיס של נפח האחסון הפנימי.
  • ספריית הבסיס של כל נפח בכרטיס ה-SD שהיצרן של המכשיר מגדיר כמהימן, בלי קשר לשאלה אם הכרטיס וירטואלי או נשלף. נפח אמין הוא נפח שאפליקציה יכולה לגשת אליו בהצלחה ברוב המקרים.
  • הספרייה Download.

גישה לקבצים

אי אפשר יותר להשתמש בפעולת הכוונה ACTION_OPEN_DOCUMENT_TREE או בפעולת הכוונה ACTION_OPEN_DOCUMENT כדי לבקש מהמשתמש לבחור קבצים בודדים מהספריות הבאות:

  • הספרייה Android/data/ וכל ספריות המשנה שלה.
  • הספרייה Android/obb/ וכל ספריות המשנה שלה.

בדיקת השינוי

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

  1. מפעילים כוונה באמצעות הפעולה ACTION_OPEN_DOCUMENT. בודקים שהספריות Android/data/ ו-Android/obb/ לא מופיעות.
  2. מבצעים אחת מהפעולות הבאות:
  3. מפעילים כוונה באמצעות הפעולה ACTION_OPEN_DOCUMENT_TREE. בודקים שהספרייה Downloadמופיעה ושהלחצן לפעולה שמשויך לספרייה מושבת.

הרשאות

ב-Android 11 נוספו השינויים הבאים שקשורים להרשאות גישה לאחסון.

טירגוט לכל גרסה

בתיבת הדו-שיח הראשונה מוצג קישור בשם 'אישור בהגדרות'.
איור 1. תיבת דו-שיח שמוצגת כשאפליקציה משתמשת בנפח אחסון ייעודי ומבקשת את ההרשאה READ_EXTERNAL_STORAGE.

השינויים הבאים ייכנסו לתוקף ב-Android 11, ללא קשר לגרסת ה-SDK שהאפליקציה מטרגטת:

  • הרשאת הגישה בזמן ריצה אחסון משנה את השם שלה לקבצים ומדיה.
  • אם האפליקציה שלכם לא ביטלה את ההסכמה לאחסון בהיקף מוגבל ומבקשת את ההרשאה READ_EXTERNAL_STORAGE, המשתמשים יראו תיבת דו-שיח שונה בהשוואה ל-Android 10. בתיבת הדו-שיח מוצג שהאפליקציה מבקשת גישה לתמונות ולמדיה, כמו שמוצג באיור 1.

    המשתמשים יכולים לראות באילו אפליקציות יש הרשאת READ_EXTERNAL_STORAGE בהגדרות המערכת. בדף הגדרות > פרטיות > מרכז ההרשאות > קבצים ומדיה, כל אפליקציה שיש לה הרשאה מופיעה בקטע מותר, כל הזמן. אם האפליקציה שלכם מיועדת ל-Android 11, חשוב לזכור שהגישה הזו ל'כל הקבצים' היא לקריאה בלבד. כדי לקרוא את כל הקבצים באחסון המשותף ולכתוב בהם באמצעות האפליקציה הזו, צריך לקבל את ההרשאה גישה לכל הקבצים.

טירגוט ל-Android 11

אם האפליקציה שלכם מטרגטת את Android 11, גם ההרשאה WRITE_EXTERNAL_STORAGE וגם הרשאת WRITE_MEDIA_STORAGE המועדפת לא מספקות יותר גישה נוספת.

חשוב לזכור שבמכשירים עם Android 10 (רמת API ‏29) ומעלה, האפליקציה יכולה לתרום לאוספי מדיה מוגדרים היטב כמו MediaStore.Downloads בלי לבקש הרשאות שקשורות לאחסון. מידע נוסף על בקשת רק ההרשאות הנדרשות כשעובדים עם קובצי מדיה באפליקציה

גישה לכל הקבצים

רוב האפליקציות שדורשות גישה לאחסון שיתופי יכולות לפעול לפי השיטות המומלצות לשיתוף קובצי מדיה ושיתוף קבצים שאינם קובצי מדיה. עם זאת, יש אפליקציות שתרחיש השימוש העיקרי שלהן מחייב גישה רחבה לקבצים במכשיר, אבל הן לא יכולות לעשות זאת ביעילות באמצעות שיטות מומלצות לאחסון ששומרות על הפרטיות. במצבים כאלה, מערכת Android מספקת גישה מיוחדת לאפליקציות שנקראת גישה לכל הקבצים. מידע נוסף זמין במדריך בנושא ניהול כל הקבצים במכשיר אחסון.

מקורות מידע נוספים

למידע נוסף על שינויים באחסון ב-Android 11, אפשר לעיין במקורות המידע הבאים:

פוסטים בבלוג

סרטונים