تمام فایل های موجود در یک دستگاه ذخیره سازی را مدیریت کنید

اکثر برنامه‌هایی که نیاز به دسترسی به فضای ذخیره‌سازی مشترک دارند، می‌توانند بهترین روش‌ها را برای اشتراک‌گذاری فایل‌های رسانه‌ای و اشتراک‌گذاری فایل‌های غیررسانه‌ای دنبال کنند. با این حال، برخی از برنامه‌ها یک مورد استفاده اصلی دارند که نیاز به دسترسی گسترده به فایل‌های موجود در دستگاه دارد، اما نمی‌توانند با استفاده از بهترین شیوه‌های ذخیره‌سازی سازگار با حریم خصوصی، به طور موثر به آنها دسترسی داشته باشند. اندروید برای این مواقع دسترسی به اپلیکیشن خاصی به نام دسترسی همه فایل ها را فراهم می کند.

به عنوان مثال، مورد استفاده اولیه یک برنامه آنتی ویروس ممکن است به اسکن منظم بسیاری از فایل ها در دایرکتوری های مختلف نیاز داشته باشد. اگر این اسکن به تعاملات مکرر کاربر برای انتخاب دایرکتوری ها با استفاده از انتخابگر فایل سیستم نیاز داشته باشد، تجربه کاربری ضعیفی را ارائه می دهد. موارد استفاده دیگر - مانند برنامه های مدیریت فایل، پشتیبان گیری و بازیابی برنامه ها و برنامه های مدیریت اسناد - به ملاحظات مشابهی نیاز دارند.

درخواست دسترسی به تمام فایل ها

یک برنامه می‌تواند با انجام کارهای زیر از کاربر درخواست دسترسی به تمام فایل‌ها کند:

  1. مجوز MANAGE_EXTERNAL_STORAGE را در مانیفست اعلام کنید.
  2. از اقدام قصد 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() برای ارسال کاربران به فعالیت مدیریت فضای سفارشی برنامه دیگر استفاده کنند.

متد 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. هشدار Lint در Android Studio که خط مشی Google Play را در مورد مجوز MANAGE_EXTERNAL_STORAGE به توسعه دهندگان یادآوری می کند.

فقط زمانی مجوز MANAGE_EXTERNAL_STORAGE درخواست کنید که برنامه شما نتواند به طور موثر از APIهای سازگارتر با حریم خصوصی مانند چارچوب دسترسی به فضای ذخیره سازی یا API فروشگاه رسانه استفاده کند. استفاده برنامه شما از مجوز باید در محدوده استفاده های مجاز باشد و باید مستقیماً با عملکرد اصلی برنامه مرتبط باشد. اگر برنامه شما دارای یک مورد استفاده مشابه هر یک از موارد زیر باشد، احتمالاً می‌تواند مجوز MANAGE_EXTERNAL_STORAGE را درخواست کند:

  • مدیران فایل
  • پشتیبان گیری و بازیابی برنامه ها
  • برنامه های ضد ویروس
  • برنامه های مدیریت اسناد
  • جستجوی فایل روی دستگاه
  • رمزگذاری دیسک و فایل
  • انتقال داده از دستگاه به دستگاه