مدیریت همه فایل‌ها در دستگاه ذخیره‌سازی

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

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

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

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

  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 نسخه ۱۲ (سطح API‏ ۳۱) و بالاتر، برنامه‌هایی که هم اجازه 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 (سطح میانای برنامه‌سازی کاربردی ۳۰) یا بالاتر را هدف قرار می‌دهند و ازطریق اجازه MANAGE_EXTERNAL_STORAGE درخواست دسترسی به همه فایل‌ها را دارند ارزیابی کند. این خط‌مشی از مه ۲۰۲۱ اجرایی می‌شود.

وقتی برنامه شما Android 11 یا بالاتر را هدف قرار می‌دهد و اجازه MANAGE_EXTERNAL_STORAGE را اعلام می‌کند، Android Studio هشدار lint را که در شکل ۱ نشان داده شده است نمایش می‌دهد. این هشدار به شما یادآوری می‌کند که «فروشگاه Google Play» خط‌مشی‌ای دارد که استفاده از این اجازه را محدود می‌کند.

شکل ۱. هشدار Lint در Android Studio که خط‌مشی Google Play را درباره اجازه MANAGE_EXTERNAL_STORAGE به توسعه‌دهندگان یادآوری می‌کند.

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

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