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

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

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

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

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

  1. מצהירים על ההרשאה MANAGE_EXTERNAL_STORAGE במניפסט.
  2. משתמשים בפעולת ה-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, אם האפליקציה עם שם החבילה שצוין הגדירה פעילות מותאמת אישית של "ניהול נפח האחסון". האפליקציה לניהול קבצים שקראה ל-method‏ 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 מוצגת אזהרת ה-lint שמופיעה באיור 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:

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