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

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

הפעלת פעילות של ניהול אחסון באפליקציה אחרת

ב-Android מגרסה 12 (רמת API 31) ואילך, אפליקציות שיש להן את ההרשאה MANAGE_EXTERNAL_STORAGE ואת ההרשאה QUERY_ALL_PACKAGES—כמו אפליקציות לניהול קבצים—יכולות להשתמש בהרשאה getManageSpaceActivityIntent() כדי להפנות משתמשים אל פעילות מותאמת אישית לניהול מרחב אחסון של אפליקציה אחרת.

ה-method‏ getManageSpaceActivityIntent() מקבלת שם חבילה וקוד בקשה, ומחזירה אחד מהערכים הבאים:

  • PendingIntent, אם באפליקציה עם שם החבילה שצוין הוגדרה פעילות מותאמת אישית של ניהול המרחב. אפליקציית ניהול הקבצים שקראה לשיטה getManageSpaceActivityIntent() יכולה להפעיל את הכוונה שהוחזרה כדי לשלוח משתמשים לפעילות המותאמת אישית.
  • null, אם האפליקציה עם שם החבילה שצוין לא מגדירה פעילות מסוג manage space.

הפעלת ההרשאה 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 ידידותיים יותר לפרטיות, כמו framework של גישה לאחסון או Media Store API. השימוש בהרשאה באפליקציה שלך חייב להיות במסגרת השימושים המותרים, וקשור ישירות לפונקציונליות העיקרית של האפליקציה. אם האפליקציה שלך כוללת תרחיש שימוש שדומה לאחד מהתרחישים הבאים, סביר להניח שאפשר לבקש את ההרשאה MANAGE_EXTERNAL_STORAGE:

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