ברוב האפליקציות שדורשות גישה לנפח אחסון משותף, אפשר לפעול לפי השיטות המומלצות לשיתוף קובצי מדיה ולשיתוף קבצים שהם לא קובצי מדיה. עם זאת, יש אפליקציות שתרחיש השימוש העיקרי שלהן מחייב גישה רחבה לקבצים במכשיר, אבל הן לא יכולות לגשת אליהם ביעילות באמצעות השיטות המומלצות לאחסון עם דגש על פרטיות. במצבים כאלה, Android מספקת גישה מיוחדת לאפליקציה שנקראת גישה לכל הקבצים.
לדוגמה, יכול להיות שתרחיש השימוש העיקרי של אפליקציית אנטי-וירוס ידרוש סריקה קבועה של קבצים רבים בספריות שונות. אם הסריקה הזו דורשת אינטראקציות חוזרות של המשתמש כדי לבחור ספריות באמצעות הכלי לבחירת קבצים של המערכת, חוויית המשתמש תהיה גרועה. תרחישים אחרים לדוגמה – כמו אפליקציות לניהול קבצים, אפליקציות לגיבוי ושחזור ואפליקציות לניהול מסמכים – דורשים שיקולים דומים.
בקשת גישה לכל הקבצים
כדי לבקש מהמשתמש גישה לכל הקבצים, האפליקציה יכולה לבצע את הפעולות הבאות:
- מצהירים על ההרשאה
MANAGE_EXTERNAL_STORAGEבמניפסט. - משתמשים בפעולת ה-intent
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSIONכדי להפנות את המשתמשים לדף הגדרות המערכת שבו הם יכולים להפעיל את האפשרות הבאה באפליקציה: הרשאת גישה לניהול כל הקבצים.
כדי לבדוק אם האפליקציה קיבלה את ההרשאה MANAGE_EXTERNAL_STORAGE, צריך להפעיל את Environment.isExternalStorageManager().
פעולות שמותרות במסגרת ההרשאה MANAGE_EXTERNAL_STORAGE
ההרשאה MANAGE_EXTERNAL_STORAGE מעניקה את היכולות הבאות:
גישת קריאה וכתיבה לכל הקבצים בנפח האחסון המשותף.
גישה לתוכן של הטבלה
MediaStore.Files.גישה לתיקיית השורש של כונן ה-USB on-the-go (OTG) ושל כרטיס ה-SD.
גישת כתיבה לכל ספריות האחסון הפנימיות, חוץ מ-
/Android/data/,/sdcard/Androidורוב ספריות המשנה של/sdcard/Android. גישת הכתיבה הזו כוללת גישה לנתיב הקובץ הישיר.אפליקציות שקיבלו את ההרשאה הזו עדיין לא יכולות לגשת לספריות הספציפיות לאפליקציה ששייכות לאפליקציות אחרות, כי הספריות האלה מופיעות כספריות משנה של
Android/data/בנפח האחסון.
כשאפליקציה מקבלת את ההרשאה MANAGE_EXTERNAL_STORAGE, היא יכולה לגשת לקבצים ולספריות הנוספים האלה באמצעות MediaStore API או נתיבי קבצים ישירים. עם זאת, כשמשתמשים ב-Storage Access Framework, אפשר לגשת לקובץ או לספרייה רק אם אפשר לעשות זאת בלי ההרשאה MANAGE_EXTERNAL_STORAGE.
הפעלת פעילות ניהול האחסון של אפליקציה אחרת
ב-Android מגרסה 12 (רמת API 31) ואילך, אפליקציות שיש להן גם את ההרשאה MANAGE_EXTERNAL_STORAGE וגם את ההרשאה QUERY_ALL_PACKAGES (כמו אפליקציות לניהול קבצים) יכולות להשתמש ב-getManageSpaceActivityIntent() כדי להפנות משתמשים לפעילות ניהול המרחב המותאמת אישית של אפליקציה אחרת.
ה-method getManageSpaceActivityIntent() מקבלת שם חבילה וקוד בקשה, ומחזירה אחד מהערכים הבאים:
PendingIntent, אם האפליקציה עם שם החבילה שצוין הגדירה פעילות מותאמת אישית של "ניהול נפח האחסון". האפליקציה לניהול קבצים שקראה ל-methodgetManageSpaceActivityIntent()יכולה להפעיל את ה-Intent שהוחזר כדי לשלוח את המשתמשים לפעילות בהתאמה אישית.-
null, אם האפליקציה עם שם החבילה שצוין לא מגדירה פעילות של "ניהול נפח האחסון".
הפעלת MANAGE_EXTERNAL_STORAGE לבדיקה
כדי לבדוק איך ההרשאה MANAGE_EXTERNAL_STORAGE משפיעה על האפליקציה, אפשר להפעיל את ההרשאה לצורך בדיקה. כדי לעשות את זה, מריצים את הפקודה הבאה במכונה שמחוברת למכשיר הבדיקה:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
הודעה מ-Google Play
בקטע הזה מופיעה הודעה למפתחים שמפרסמים אפליקציות ב-Google Play.
כדי להגביל את הגישה הרחבה לנפח האחסון המשותף, חנות Google Play עדכנה את המדיניות שלה כך שתעריך אפליקציות שמטרגטות את Android 11 (רמת API 30) ומעלה ומבקשות גישה לכל הקבצים באמצעות ההרשאה MANAGE_EXTERNAL_STORAGE. המדיניות הזו נכנסה לתוקף במאי 2021.
אם האפליקציה מטרגטת ל-Android 11 ומעלה ומצהירה על ההרשאה MANAGE_EXTERNAL_STORAGE, ב-Android Studio מוצגת אזהרת ה-lint שמופיעה באיור 1. האזהרה הזו מזכירה לכם שבחנות Google Play יש מדיניות שמגבילה את השימוש בהרשאה.
MANAGE_EXTERNAL_STORAGE.
צריך לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE רק אם האפליקציה לא יכולה להשתמש ביעילות בממשקי ה-API עם דגש על פרטיות, כמו Storage Access Framework או Media Store API. השימוש של האפליקציה בהרשאה חייב להיות במסגרת השימושים המותרים, וקשור ישירות לפונקציונליות העיקרית של האפליקציה. אם האפליקציה כוללת תרחיש לדוגמה שדומה לאחד מהתרחישים הבאים, סביר להניח שהיא יכולה לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE:
- ניהול קבצים
- גיבוי ושחזור של אפליקציות
- אפליקציות אנטי-וירוס
- אפליקציות לניהול מסמכים
- חיפוש קבצים במכשיר
- הצפנת דיסקים וקבצים
- העברת נתונים ממכשיר למכשיר