רוב האפליקציות שדורשות גישה לנפח אחסון משותף יכולות לפעול לפי ההנחיות שיטות לשיתוף מדיה קבצים ושיתוף קבצים שאינם מדיה קבצים. אבל, חלק לאפליקציות יש תרחיש ליבה לדוגמה שדורש גישה רחבה לקבצים במכשיר, אבל לא יכול לגשת אליהם ביעילות באמצעות השיטות המומלצות לאחסון עם דגש על פרטיות. לצורך המצבים האלה, ב-Android יש הרשאת גישה מיוחדת לאפליקציות שנקראת גישה לכל הקבצים.
לדוגמה, התרחיש העיקרי של שימוש באפליקציית אנטי-וירוס עשוי לדרוש סריקת קבצים רבים במספר ספריות באופן קבוע. אם הסריקה הזו דורשת אינטראקציות חוזרות של משתמשים כדי לבחור ספריות באמצעות בורר הקבצים של המערכת, חוויית המשתמש תהיה גרועה. תרחישים אחרים לדוגמה, כמו אפליקציות לניהול קבצים, אפליקציות גיבוי ושחזור ואפליקציות לניהול מסמכים – יש צורך באפליקציות דומות שיקולים.
שליחת בקשה לגישה לכל הקבצים
אפליקציה יכולה לבקש מהמשתמש גישה לכל הקבצים באמצעות הפעולות הבאות:
- להצהיר על
MANAGE_EXTERNAL_STORAGE
במניפסט. - משתמשים ב
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
פעולת Intent שתפנה את המשתמשים לדף הגדרות מערכת שבו הם יוכלו להפעיל את האפשרות הבאה לאפליקציה: מתן גישה לניהול כל הקבצים.
כדי לבדוק אם לאפליקציה שלך הוענקה MANAGE_EXTERNAL_STORAGE
הרשאה, שיחה
Environment.isExternalStorageManager()
.
הפעולות מותרות על ידי MANAGE_EXTERNAL_STORAGE
ההרשאה MANAGE_EXTERNAL_STORAGE
מעניקה את האפשרויות הבאות:
הרשאת קריאה וכתיבה לכל הקבצים באחסון שיתופי.
גישה לתוכן של הטבלה
MediaStore.Files
.גישה לספריית השורש של כונן ה-USB לנייד (OTG) ושל כרטיס ה-SD.
הרשאת כתיבה לכל ספריות האחסון הפנימיות, מלבד
/Android/data/
,/sdcard/Android
ורוב ספריות המשנה של/sdcard/Android
. גישת הכתיבה הזו כוללת קובץ ישיר נתיב.אפליקציות שקיבלו את ההרשאה הזו עדיין לא יכולות לגשת לספריות הספציפיות לאפליקציה ששייכות לאפליקציות אחרות, כי הספריות האלה מופיעות כספריות משנה של
Android/data/
בנפח אחסון.
כשאפליקציה מקבלת את ההרשאה MANAGE_EXTERNAL_STORAGE
, היא יכולה לגשת לקבצים ולספריות הנוספים האלה באמצעות ה-API של MediaStore
או באמצעות נתיבי קבצים ישירים. עם זאת, כשמשתמשים ב-Storage Access Framework, אפשר לגשת לקובץ או לספרייה רק אם אפשר לעשות זאת בלי ההרשאה MANAGE_EXTERNAL_STORAGE
.
הפעלת פעילות ניהול האחסון של אפליקציה אחרת
ב-Android 12 (רמת API 31) ואילך, אפליקציות עם גם
MANAGE_EXTERNAL_STORAGE
ואת ההרשאה
QUERY_ALL_PACKAGES
הרשאה, כמו אפליקציות לניהול קבצים, יכולה להשתמש
getManageSpaceActivityIntent()
כדי לשלוח משתמשים לניהול מרחב מותאם אישית של אפליקציה אחרת
פעילות.
ה-method getManageSpaceActivityIntent()
מקבלת שם חבילה ו
, והוא מחזיר אחת מהאפשרויות הבאות:
PendingIntent
, אם האפליקציה עם התג שם החבילה שצוין הגדיר 'ניהול שטח' מותאם אישית פעילות. לאחר מכן, אפליקציית ניהול הקבצים שהפעילה את השיטהgetManageSpaceActivityIntent()
יכולה להפעיל את ה-Intent שהוחזר כדי לשלוח משתמשים לפעילות בהתאמה אישית.null
, אם האפליקציה עם שם החבילה שצוין לא מגדירה 'ניהול מרחב" פעילות.
הפעלת MANAGE_EXTERNAL_STORAGE לצורך בדיקה
כדי לבדוק איך ההרשאה MANAGE_EXTERNAL_STORAGE
משפיעה על האפליקציה, תוכלו להפעיל את ההרשאה לצורך בדיקה. כדי לעשות זאת, מריצים את הפקודה הבאה במכונה שמחוברת למכשיר הבדיקה:
adb shell appops set --uidPACKAGE_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 אזהרת איתור שגיאות בקוד שמופיעה באיור 1. האזהרה הזו מזכירה לכם שבחנות Google Play יש
שמגבילה את השימוש בהרשאה.
MANAGE_EXTERNAL_STORAGE
.
צריך לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE
רק אם האפליקציה לא יכולה להשתמש ביעילות בממשקי ה-API שמיועדים להגנה על הפרטיות, כמו Storage Access Framework או Media Store API. השימוש של האפליקציה בהרשאה צריך להתאים לשימושים המותרים, והוא חייב להיות קשור ישירות לפונקציונליות העיקרית של האפליקציה. אם האפליקציה כוללת תרחיש לדוגמה שדומה לאחד מהתרחישים הבאים, סביר להניח שהיא יכולה לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE
:
- ניהול קבצים
- גיבוי ושחזור של אפליקציות
- אפליקציות אנטי-וירוס
- אפליקציות לניהול מסמכים
- חיפוש קבצים במכשיר
- הצפנת דיסקים וקבצים
- העברת נתונים ממכשיר למכשיר