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

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

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

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

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

  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 یا مسیرهای مستقیم فایل به این فایل‌ها و دایرکتوری‌های اضافی دسترسی پیدا کند. با این حال، وقتی از Storage Access Framework استفاده می‌کنید، فقط در صورتی می‌توانید به یک فایل یا دایرکتوری دسترسی داشته باشید که بتوانید بدون داشتن مجوز MANAGE_EXTERNAL_STORAGE این کار را انجام دهید.

فراخوانی فعالیت مدیریت فضای ذخیره‌سازی برنامه‌ی دیگر

در اندروید ۱۲ (سطح API 31) و بالاتر، برنامه‌هایی که هم مجوز MANAGE_EXTERNAL_STORAGE و هم مجوز QUERY_ALL_PACKAGES را دارند - مانند برنامه‌های مدیریت فایل - می‌توانند از getManageSpaceActivityIntent() برای ارسال کاربران به activity مدیریت فضای سفارشی برنامه دیگر استفاده کنند.

متد getManageSpaceActivityIntent() نام پکیج و کد درخواست را دریافت می‌کند و یکی از مقادیر زیر را برمی‌گرداند:

  • یک PendingIntent ، اگر برنامه‌ای با نام بسته‌ی مشخص شده، یک اکتیویتی سفارشی "مدیریت فضا" تعریف کرده باشد. برنامه‌ی مدیریت فایل که متد getManageSpaceActivityIntent() را فراخوانی کرده است، می‌تواند اینتنت برگشتی را برای ارسال کاربران به اکتیویتی سفارشی فراخوانی کند.
  • null ، اگر برنامه با نام بسته مشخص شده، فعالیت "مدیریت فضا" را تعریف نکند.

فعال کردن MANAGE_EXTERNAL_STORAGE برای آزمایش

برای بررسی اینکه مجوز MANAGE_EXTERNAL_STORAGE چگونه بر برنامه شما تأثیر می‌گذارد، می‌توانید مجوز تست را فعال کنید. برای انجام این کار، دستور زیر را روی دستگاهی که به دستگاه تست شما متصل است اجرا کنید:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

اطلاعیه گوگل پلی

این بخش اطلاعیه‌ای برای توسعه‌دهندگانی که برنامه‌ها را در Google Play منتشر می‌کنند، ارائه می‌دهد.

برای محدود کردن دسترسی گسترده به فضای ذخیره‌سازی مشترک، فروشگاه گوگل پلی سیاست خود را به‌روزرسانی کرده است تا برنامه‌هایی را که اندروید ۱۱ (سطح API 30) یا بالاتر را هدف قرار می‌دهند و از طریق مجوز MANAGE_EXTERNAL_STORAGE درخواست دسترسی به همه فایل‌ها را دارند، ارزیابی کند. این سیاست از ماه مه ۲۰۲۱ لازم‌الاجرا است.

وقتی برنامه شما اندروید ۱۱ یا بالاتر را هدف قرار می‌دهد و مجوز MANAGE_EXTERNAL_STORAGE را اعلام می‌کند، اندروید استودیو هشدار lint را که در شکل ۱ ظاهر می‌شود، نشان می‌دهد. این هشدار به شما یادآوری می‌کند که فروشگاه گوگل پلی سیاستی دارد که استفاده از این مجوز را محدود می‌کند.

شکل ۱. هشدار Lint در اندروید استودیو که به توسعه‌دهندگان در مورد سیاست گوگل پلی در مورد مجوز MANAGE_EXTERNAL_STORAGE یادآوری می‌کند.

فقط زمانی مجوز MANAGE_EXTERNAL_STORAGE را درخواست کنید که برنامه شما نتواند به طور مؤثر از APIهای سازگارتر با حریم خصوصی، مانند Storage Access Framework یا Media Store API، استفاده کند. استفاده برنامه شما از این مجوز باید در محدوده کاربردهای مجاز باشد و مستقیماً به عملکرد اصلی برنامه مرتبط باشد. اگر برنامه شما شامل یک مورد استفاده مشابه هر یک از موارد زیر باشد، احتمالاً می‌تواند مجوز MANAGE_EXTERNAL_STORAGE را درخواست کند:

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