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, אפליקציות שמשתמשות במודל של אחסון בהיקף מוגבל יכולות לגשת רק לקובצי מטמון ספציפיים לאפליקציה שלהן. אם האפליקציה שלכם צריכה לנהל את נפח האחסון במכשיר, פועלים לפי ההוראות במאמר בנושא שאילתת נפח אחסון פנוי.
- כדי לבדוק אם יש נפח אחסון פנוי, מפעילים את פעולת הכוונה
ACTION_MANAGE_STORAGE
. אם אין מספיק מקום פנוי במכשיר, מבקשים מהמשתמש להעניק לאפליקציה הסכמה לניקוי כל מטמוני הנתונים. כדי לעשות זאת, מפעילים את פעולת הכוונה
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/
וכל ספריות המשנה שלה.
בדיקת השינוי
כדי לבדוק את השינוי בהתנהגות, מבצעים את הפעולות הבאות:
- מפעילים כוונה באמצעות הפעולה
ACTION_OPEN_DOCUMENT
. בודקים שהספריותAndroid/data/
ו-Android/obb/
לא מופיעות. - מבצעים אחת מהפעולות הבאות:
- מפעילים את דגל התאימות של האפליקציה
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - טרגוט ל-Android מגרסה 11 ואילך.
- מפעילים את דגל התאימות של האפליקציה
- מפעילים כוונה באמצעות הפעולה
ACTION_OPEN_DOCUMENT_TREE
. בודקים שהספרייהDownload
מופיעה ושהלחצן לפעולה שמשויך לספרייה מושבת.
הרשאות
ב-Android 11 נוספו השינויים הבאים שקשורים להרשאות גישה לאחסון.
טירגוט לכל גרסה
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, אפשר לעיין במקורות המידע הבאים: