גרסת 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 היעד ולערכי הדגלים במניפסט של האפליקציה, מפעילים את דגלי התאימות הבאים של האפליקציה:
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 כמה שיטות שבעזרתן קל יותר לנהל קבוצות של קובצי מדיה.
גישה לקבצים באמצעות נתיבי קבצים ישירים וספריות מקומיות
כדי לעזור לאפליקציה לפעול בצורה חלקה יותר עם ספריות מדיה של צד שלישי, ב-Android 11 אפשר להשתמש בממשקי API שאינם MediaStore
API כדי לגשת לקובצי מדיה מאחסון משותף באמצעות נתיבי קבצים ישירים. ממשקי ה-API האלה כוללים את:
- ה-API של
File
. - ספריות מקוריות, כמו
fopen()
.
גישה לנתונים מאפליקציות אחרות
כדי להגן על פרטיות המשתמשים, במכשירים עם Android מגרסה 11 ואילך, המערכת מגבילה עוד יותר את הגישה של האפליקציה לספריות פרטיות של אפליקציות אחרות.
גישה לספריות נתונים באחסון פנימי
בגרסה 9 של Android (רמת API 28) התחיל תהליך של הגבלת האפליקציות שיכולות להפוך את הקבצים בספריות הנתונים שלהן באחסון הפנימי לזמינים לכל האפליקציות האחרות. אפליקציות שמטרגטות את Android מגרסה 9 ואילך לא יכולות להגדיר גישה לכל המשתמשים לקבצים בספריות הנתונים שלהן.
הגבלה זו מורחבת ב-Android 11. אם האפליקציה שלכם מטרגטת את Android 11, היא לא יכולה לגשת לקבצים בספריית הנתונים של אפליקציה אחרת, גם אם האפליקציה האחרת מטרגטת את Android 8.1 (רמת API 27) או גרסה ישנה יותר, והקבצים בספריית הנתונים שלה ניתנים לקריאה לכולם.
גישה לספריות ספציפיות לאפליקציה באחסון חיצוני
במכשירי Android 11, לאפליקציות אין יותר גישה לקבצים בכל בכל ספרייה ייעודית ספציפית לאפליקציה אחרת של אפליקציה אחרת שנמצאת באחסון חיצוני.
הגבלות גישה למסמכים
כדי לתת למפתחים זמן לבדיקה, השינויים הבאים שקשורים למסגרת הגישה לאחסון (SAF) ייכנסו לתוקף רק אם האפליקציה שלכם מטרגטת ל-Android 11 ואילך.
גישה לספריות
אי אפשר יותר להשתמש בפעולת כוונת הרכישה ACTION_OPEN_DOCUMENT_TREE
כדי לבקש גישה לספריות הבאות:
- ספריית הבסיס של נפח האחסון הפנימי.
- ספריית השורש של כל נפח אחסון בכרטיס SD שנחשב על ידי יצרן המכשיר כמהימנה, ללא קשר אם הכרטיס הוא משובט או נשלף. נפח אחסון אמין הוא כזה שאפליקציה יכולה לגשת אליו בהצלחה רוב הזמן.
- הספרייה
Download
.
גישה לקבצים
לא ניתן יותר להשתמש בפעולה ACTION_OPEN_DOCUMENT_TREE
או בפעולה ACTION_OPEN_DOCUMENT
כדי לבקש מהמשתמש לבחור קבצים ספציפיים מהספריות הבאות:
- הספרייה
Android/data/
וכל ספריות המשנה. - הספרייה
Android/obb/
וכל ספריות המשנה.
בדיקת השינוי
כדי לבדוק את השינוי הזה בהתנהגות, מבצעים את הפעולות הבאות:
- קריאה לכוונה באמצעות הפעולה
ACTION_OPEN_DOCUMENT
. מוודאים שהספריותAndroid/data/
ו-Android/obb/
לא מופיעות. - מבצעים אחת מהפעולות הבאות:
- מפעילים את הדגל
RESTRICT_STORAGE_ACCESS_FRAMEWORK
של תאימות האפליקציה. - טירגוט למכשירי Android מגרסה 11 ואילך.
- מפעילים את הדגל
- קריאה לכוונה באמצעות הפעולה
ACTION_OPEN_DOCUMENT_TREE
. בודקים שהספרייהDownload
מופיעה ושהלחצן של הפעולה שמשויך לספרייה דהוי.
הרשאות
ב-Android 11 יש את השינויים הבאים לגבי הרשאות אחסון.
טירגוט לכל גרסה
השינויים הבאים ייכנסו לתוקף ב-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, כדאי לעיין בחומרים הבאים: