ניהול כל הקבצים במכשיר אחסון

רוב האפליקציות שדורשות גישה לנפח אחסון משותף יכולות לפעול לפי ההנחיות שיטות לשיתוף מדיה קבצים ושיתוף קבצים שאינם מדיה קבצים. אבל, חלק לאפליקציות יש תרחיש ליבה לדוגמה שדורש גישה רחבה לקבצים במכשיר, אבל לא יכול לגשת אליהם ביעילות באמצעות השיטות המומלצות לאחסון עם דגש על פרטיות. לצורך המצבים האלה, ב-Android יש הרשאת גישה מיוחדת לאפליקציות שנקראת גישה לכל הקבצים.

לדוגמה, התרחיש העיקרי של שימוש באפליקציית אנטי-וירוס עשוי לדרוש סריקת קבצים רבים במספר ספריות באופן קבוע. אם הסריקה הזו דורשת אינטראקציות חוזרות של משתמשים כדי לבחור ספריות באמצעות בורר הקבצים של המערכת, חוויית המשתמש תהיה גרועה. תרחישים אחרים לדוגמה, כמו אפליקציות לניהול קבצים, אפליקציות גיבוי ושחזור ואפליקציות לניהול מסמכים – יש צורך באפליקציות דומות שיקולים.

שליחת בקשה לגישה לכל הקבצים

אפליקציה יכולה לבקש מהמשתמש גישה לכל הקבצים באמצעות הפעולות הבאות:

  1. להצהיר על MANAGE_EXTERNAL_STORAGE במניפסט.
  2. משתמשים ב 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 --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 אזהרת איתור שגיאות בקוד שמופיעה באיור 1. האזהרה הזו מזכירה לכם שבחנות Google Play יש שמגבילה את השימוש בהרשאה.

איור 1. אזהרה של Lint ב-Android Studio שמזכירה למפתחים את המדיניות של Google Play בנושא ההרשאה MANAGE_EXTERNAL_STORAGE.

צריך לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE רק אם האפליקציה לא יכולה להשתמש ביעילות בממשקי ה-API שמיועדים להגנה על הפרטיות, כמו Storage Access Framework או Media Store API. השימוש של האפליקציה בהרשאה צריך להתאים לשימושים המותרים, והוא חייב להיות קשור ישירות לפונקציונליות העיקרית של האפליקציה. אם האפליקציה כוללת תרחיש לדוגמה שדומה לאחד מהתרחישים הבאים, סביר להניח שהיא יכולה לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE:

  • ניהול קבצים
  • גיבוי ושחזור של אפליקציות
  • אפליקציות אנטי-וירוס
  • אפליקציות לניהול מסמכים
  • חיפוש קבצים במכשיר
  • הצפנת דיסקים וקבצים
  • העברת נתונים ממכשיר למכשיר