ב-Android 11 (רמת API 30) הפלטפורמה שופרה עוד יותר, והיא מספקת הגנה טובה יותר על נתוני האפליקציה והמשתמשים באחסון חיצוני. בגרסה הזו יש כמה שיפורים, כמו גישה לנתיב של קובץ RAW, עריכת תצלומים מרובים למדיה וממשק משתמש מעודכן ל-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 המטורגטת של האפליקציה ולערכי הדגלים במניפסט, צריך להפעיל את דגלי התאימות הבאים של האפליקציה:
DEFAULT_SCOPED_STORAGE(מופעלת בכל האפליקציות כברירת מחדל)FORCE_ENABLE_SCOPED_STORAGE(מושבתת כברירת מחדל בכל האפליקציות)
כדי להשבית את נפח האחסון הייעודי לאפליקציות ולהשתמש במודל האחסון הקודם, צריך לבטל את ההגדרה של שני הדגלים.
ניהול האחסון במכשיר
החל מגרסת Android 11, אפליקציות שמשתמשות במודל של נפח אחסון ייעודי לאפליקציות יכולות לגשת רק לקובצי המטמון הספציפיים לאפליקציה שלהן. אם האפליקציה צריכה לנהל את האחסון במכשיר, פועלים לפי ההוראות לשליחת שאילתה לגבי נפח האחסון הפנוי.
- כדי לבדוק אם יש מקום פנוי, מפעילים את פעולת ה-Intent
ACTION_MANAGE_STORAGE. אם אין מספיק מקום פנוי במכשיר, בקשו מהמשתמש לתת לאפליקציה הרשאה לנקות את כל המטמונים. כדי לעשות את זה, מפעילים את פעולת ה-Intent
ACTION_CLEAR_APP_CACHE.
ספרייה ספציפית לאפליקציה באחסון חיצוני
החל מ-Android 11, אפליקציות לא יכולות ליצור ספרייה ספציפית לאפליקציה באחסון חיצוני. כדי לגשת לספרייה שהמערכת מספקת לאפליקציה, צריך להפעיל את getExternalFilesDirs().
גישה לקובצי מדיה
כדי להקל על הגישה למדיה תוך שמירה על פרטיות המשתמשים, ב-Android 11 נוספו היכולות הבאות.
ביצוע מקבץ פעולות
כדי לשמור על עקביות בין מכשירים ולהקל על המשתמשים, ב-Android 11 נוספו כמה שיטות שמאפשרות לנהל קבוצות של קובצי מדיה בקלות רבה יותר.
גישה לקבצים באמצעות נתיבי קבצים ישירים וספריות Native
כדי שהאפליקציה תפעל בצורה חלקה יותר עם ספריות מדיה של צד שלישי, ב-Android 11 אפשר להשתמש בממשקי API אחרים מלבד ה-API של MediaStore כדי לגשת לקובצי מדיה מנפח אחסון משותף באמצעות נתיבי קבצים ישירים. ממשקי ה-API האלה כוללים:
-
FileAPI. - ספריות Native, כמו
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 ואילך.
גישה לספריות
אי אפשר יותר להשתמש בפעולת ה-intent ACTION_OPEN_DOCUMENT_TREE כדי לבקש גישה לספריות הבאות:
- תיקיית השורש של נפח האחסון הפנימי.
- תיקיית השורש של כל נפח כרטיס SD שיצרן המכשיר מחשיב כאמין, בין אם הכרטיס הוא אמולטור או נשלף. אמצעי אחסון אמין הוא אמצעי אחסון שהאפליקציה יכולה לגשת אליו בהצלחה ברוב המקרים.
- הספרייה
Download.
גישה לקבצים
אי אפשר יותר להשתמש בפעולת ה-Intent
ACTION_OPEN_DOCUMENT_TREE
או
ACTION_OPEN_DOCUMENT
כדי לבקש מהמשתמש לבחור קבצים ספציפיים מהספריות הבאות:
- הספרייה
Android/data/וכל ספריות המשנה. - הספרייה
Android/obb/וכל ספריות המשנה.
בדיקת השינוי
כדי לבדוק את השינוי בהתנהגות:
- מפעילים Intent באמצעות הפעולה
ACTION_OPEN_DOCUMENT. מוודאים שהספריותAndroid/data/ו-Android/obb/לא מופיעות. - מבצעים אחת מהפעולות הבאות:
- מפעילים את הדגל
RESTRICT_STORAGE_ACCESS_FRAMEWORKלתאימות האפליקציה. - לטרגט ל-Android 11 ואילך.
- מפעילים את הדגל
- מפעילים Intent באמצעות הפעולה
ACTION_OPEN_DOCUMENT_TREE. מוודאים שהספרייהDownloadמופיעה, ושלחצן הפעולה שמשויך לספרייה מופיע באפור.
הרשאות
ב-Android 11 יש את השינויים הבאים שקשורים להרשאות אחסון.
טירגוט לכל גרסה
READ_EXTERNAL_STORAGE.השינויים הבאים נכנסים לתוקף ב-Android 11, בלי קשר לגרסת ה-SDK המטורגטת של האפליקציה:
- ההרשאה בתחילת ההפעלה אחסון נקראת עכשיו קבצים ומדיה.
אם לא ביטלתם את ההסכמה לנפח אחסון ייעודי לאפליקציות באפליקציה שלכם, והאפליקציה מבקשת את ההרשאה
READ_EXTERNAL_STORAGE, למשתמשים תוצג תיבת דו-שיח שונה מזו שמוצגת ב-Android 10. בתיבת הדו-שיח מצוין שהאפליקציה מבקשת גישה לתמונות ולמדיה, כמו שמוצג באיור 1.המשתמשים יכולים לראות בהגדרות המערכת לאילו אפליקציות יש את ההרשאה
READ_EXTERNAL_STORAGE. בדף הגדרות > פרטיות > מנהל ההרשאות > קבצים ומדיה, כל אפליקציה שיש לה את ההרשאה מופיעה בקטע מותר לכל הקבצים. אם האפליקציה מטרגטת את Android 11, חשוב לזכור שהגישה הזו ל "כל הקבצים" היא לקריאה בלבד. כדי לקרוא קבצים ולכתוב בהם בנפח אחסון משותף באמצעות האפליקציה הזו, צריך שתהיה לכם הרשאת גישה לכל הקבצים.
Target Android 11
אם האפליקציה מטרגטת את Android 11, ההרשאה WRITE_EXTERNAL_STORAGE וההרשאה המיוחדת WRITE_MEDIA_STORAGE לא מספקות יותר גישה נוספת.
חשוב לזכור שבמכשירים עם Android מגרסה 10 (רמת API 29) ומעלה, האפליקציה יכולה לתרום לאוספי מדיה מוגדרים היטב כמו MediaStore.Downloads בלי לבקש הרשאות שקשורות לאחסון. איך לבקש רק את ההרשאות הנדרשות כשעובדים עם קובצי מדיה באפליקציה
גישה לכל הקבצים
ברוב האפליקציות שדורשות גישה לנפח אחסון משותף, אפשר לפעול לפי השיטות המומלצות לשיתוף קובצי מדיה ולשיתוף קבצים שהם לא קובצי מדיה. עם זאת, יש אפליקציות שתרחיש השימוש העיקרי שלהן מחייב גישה רחבה לקבצים במכשיר, אבל הן לא יכולות לעשות זאת ביעילות באמצעות השיטות המומלצות לאחסון עם דגש על פרטיות. במצבים כאלה, Android מספקת גישה מיוחדת לאפליקציות שנקראת גישה לכל הקבצים. מידע נוסף זמין במדריך בנושא ניהול כל הקבצים בהתקן אחסון.
מקורות מידע נוספים
למידע נוסף על השינויים באחסון ב-Android 11, אפשר לעיין במקורות המידע הבאים: