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

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

  • גישה לכתיבה לכל ספריות האחסון הפנימי⁠ /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(), יכולה עכשיו להפעיל את הכוונה שהוחזרה כדי לשלוח משתמשים לפעילות המותאמת אישית.
  • 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. אזהרה לגבי איתור שגיאות בקוד ב-Android Studio שמזכירה למפתחים את מדיניות Google Play לגבי MANAGE_EXTERNAL_STORAGE הרשאה.

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

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