به روز رسانی فضای ذخیره سازی در Android 11

اندروید ۱۱ (سطح API 30) پلتفرم را بیش از پیش بهبود می‌بخشد و محافظت بهتری از داده‌های برنامه و کاربر در حافظه خارجی ارائه می‌دهد. این نسخه چندین پیشرفت، مانند دسترسی به مسیر فایل خام، عملیات ویرایش دسته‌ای برای رسانه‌ها و رابط کاربری به‌روز شده برای چارچوب دسترسی به حافظه، را معرفی می‌کند.

این نسخه همچنین بهبودهایی در ذخیره‌سازی محدود (scoped storage ) ارائه می‌دهد که انجام موارد استفاده از ذخیره‌سازی را برای توسعه‌دهندگان پس از مهاجرت به استفاده از این مدل ذخیره‌سازی آسان‌تر می‌کند.

اجرای ذخیره‌سازی محدود

برنامه‌هایی که روی اندروید ۱۱ اجرا می‌شوند اما اندروید ۱۰ (سطح API ۲۹) را هدف قرار می‌دهند، همچنان می‌توانند ویژگی requestLegacyExternalStorage را درخواست کنند. این پرچم به برنامه‌ها اجازه می‌دهد تا به‌طور موقت از تغییرات مرتبط با ذخیره‌سازی محدود، مانند اعطای دسترسی به دایرکتوری‌های مختلف و انواع مختلف فایل‌های رسانه‌ای، انصراف دهند . پس از به‌روزرسانی برنامه خود برای هدف قرار دادن اندروید ۱۱، سیستم پرچم requestLegacyExternalStorage را نادیده می‌گیرد.

حفظ سازگاری با اندروید ۱۰

اگر برنامه شما هنگام اجرا بر روی دستگاه‌های اندروید ۱۰ از فضای ذخیره‌سازی محدود (scoped storage) خارج می‌شود، توصیه می‌شود که در فایل مانیفست برنامه خود، requestLegacyExternalStorage را همچنان روی true تنظیم کنید. به این ترتیب، برنامه شما می‌تواند در دستگاه‌هایی که اندروید ۱۰ را اجرا می‌کنند، طبق انتظار رفتار کند.

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

اگر برنامه شما از مدل ذخیره‌سازی قدیمی استفاده می‌کند و قبلاً اندروید ۱۰ یا پایین‌تر را هدف قرار داده بود، ممکن است داده‌ها را در دایرکتوری ذخیره کنید که برنامه شما هنگام فعال بودن مدل ذخیره‌سازی محدود به آن دسترسی ندارد. قبل از اینکه اندروید ۱۱ را هدف قرار دهید، داده‌ها را به دایرکتوری‌ای منتقل کنید که با ذخیره‌سازی محدود به آن سازگار باشد.

تست فضای ذخیره‌سازی محدود

برای فعال کردن ذخیره‌سازی محدود در برنامه‌تان، صرف نظر از نسخه SDK هدف برنامه و مقادیر پرچم مانیفست، پرچم‌های سازگاری برنامه زیر را فعال کنید:

برای غیرفعال کردن ذخیره‌سازی محدود و استفاده از مدل ذخیره‌سازی قدیمی به جای آن، هر دو پرچم را غیرفعال کنید .

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

از اندروید ۱۱ به بعد، برنامه‌هایی که از مدل ذخیره‌سازی محدود (scoped storage) استفاده می‌کنند، فقط می‌توانند به فایل‌های حافظه پنهان مخصوص برنامه خود دسترسی داشته باشند. اگر برنامه شما نیاز به مدیریت فضای ذخیره‌سازی دستگاه دارد، دستورالعمل‌های مربوط به نحوه جستجوی فضای خالی را دنبال کنید.

  1. با فراخوانی اکشن ACTION_MANAGE_STORAGE ، فضای خالی را بررسی کنید.
  2. اگر فضای خالی کافی روی دستگاه وجود ندارد، از کاربر بخواهید که به برنامه شما اجازه دهد تا تمام حافظه‌های پنهان را پاک کند. برای انجام این کار، اکشن ACTION_CLEAR_APP_CACHE را فراخوانی کنید.

دایرکتوری مخصوص برنامه در حافظه خارجی

از اندروید ۱۱ به بعد، برنامه‌ها نمی‌توانند دایرکتوری مخصوص به برنامه خود را در حافظه خارجی ایجاد کنند. برای دسترسی به دایرکتوری که سیستم برای برنامه شما فراهم می‌کند، تابع getExternalFilesDirs() را فراخوانی کنید.

دسترسی به فایل‌های رسانه‌ای

برای آسان‌تر کردن دسترسی به رسانه‌ها ضمن حفظ حریم خصوصی کاربر، اندروید ۱۱ قابلیت‌های زیر را اضافه کرده است.

انجام عملیات دسته‌ای

برای هماهنگی بین دستگاه‌ها و راحتی بیشتر کاربر، اندروید ۱۱ روش‌های مختلفی را اضافه کرده است که مدیریت گروه‌های فایل‌های رسانه‌ای را آسان‌تر می‌کند.

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

برای اینکه برنامه شما با کتابخانه‌های رسانه‌ای شخص ثالث راحت‌تر کار کند، اندروید ۱۱ به شما این امکان را می‌دهد که از APIهایی غیر از MediaStore API برای دسترسی به فایل‌های رسانه‌ای از حافظه مشترک با استفاده از مسیرهای مستقیم فایل استفاده کنید. این APIها شامل موارد زیر هستند:

  • API File .
  • کتابخانه‌های بومی، مانند fopen() .

دسترسی به داده‌ها از برنامه‌های دیگر

برای محافظت از حریم خصوصی کاربر، در دستگاه‌هایی که اندروید ۱۱ یا بالاتر را اجرا می‌کنند، سیستم دسترسی برنامه شما به دایرکتوری‌های خصوصی سایر برنامه‌ها را بیشتر محدود می‌کند.

دسترسی به دایرکتوری‌های داده در حافظه داخلی

اندروید ۹ (API سطح ۲۸) شروع به محدود کردن برنامه‌هایی کرد که می‌توانستند فایل‌های موجود در دایرکتوری‌های داده‌های خود در حافظه داخلی را برای سایر برنامه‌ها قابل دسترسی جهانی کنند. برنامه‌هایی که اندروید ۹ یا بالاتر را هدف قرار می‌دهند ، نمی‌توانند فایل‌های موجود در دایرکتوری‌های داده‌های خود را برای سایر برنامه‌ها قابل دسترسی جهانی کنند .

اندروید ۱۱ این محدودیت را گسترش می‌دهد. اگر برنامه شما برای اندروید ۱۱ طراحی شده باشد، نمی‌تواند به فایل‌های موجود در دایرکتوری داده‌های هیچ برنامه دیگری دسترسی پیدا کند، حتی اگر برنامه دیگر برای اندروید ۸.۱ (سطح API ۲۷) یا پایین‌تر طراحی شده باشد و فایل‌های موجود در دایرکتوری داده‌های خود را برای همه قابل خواندن کرده باشد.

دسترسی به دایرکتوری‌های مخصوص برنامه در حافظه خارجی

در اندروید ۱۱، برنامه‌ها دیگر نمی‌توانند به فایل‌های موجود در دایرکتوری اختصاصی و مختص هر برنامه‌ی دیگر در حافظه‌ی خارجی دسترسی داشته باشند.

محدودیت‌های دسترسی به اسناد

برای اینکه به توسعه‌دهندگان زمان کافی برای آزمایش داده شود، تغییرات زیر مربوط به چارچوب دسترسی به فضای ذخیره‌سازی (SAF) تنها در صورتی اعمال می‌شوند که برنامه شما برای اندروید ۱۱ یا بالاتر منتشر شده باشد.

دسترسی به دایرکتوری‌ها

شما دیگر نمی‌توانید از اکشن اینتنت ACTION_OPEN_DOCUMENT_TREE برای درخواست دسترسی به دایرکتوری‌های زیر استفاده کنید:

  • دایرکتوری ریشه‌ی حافظه‌ی داخلی.
  • دایرکتوری ریشه هر درایو کارت SD که سازنده دستگاه آن را قابل اعتماد می‌داند، صرف نظر از اینکه کارت شبیه‌سازی شده یا قابل جابجایی باشد. یک درایو قابل اعتماد، درایوی است که یک برنامه می‌تواند در بیشتر مواقع با موفقیت به آن دسترسی داشته باشد.
  • دایرکتوری Download .

دسترسی به فایل‌ها

شما دیگر نمی‌توانید از اکشن اینتنت ACTION_OPEN_DOCUMENT_TREE یا ACTION_OPEN_DOCUMENT برای درخواست انتخاب فایل‌های تکی از دایرکتوری‌های زیر توسط کاربر استفاده کنید:

  • دایرکتوری Android/data/ و تمام زیرشاخه‌های آن.
  • دایرکتوری Android/obb/ و تمام زیرشاخه‌های آن.

تغییر را آزمایش کنید

برای آزمایش این تغییر رفتار، موارد زیر را انجام دهید:

  1. با استفاده از اکشن ACTION_OPEN_DOCUMENT یک اینتنت را فراخوانی کنید. بررسی کنید که دایرکتوری‌های Android/data/ و Android/obb/ نمایش داده نشوند.
  2. یکی از موارد زیر را انجام دهید:
  3. با استفاده از اکشن ACTION_OPEN_DOCUMENT_TREE یک اینتنت را فراخوانی کنید. بررسی کنید که دایرکتوری Download نمایش داده شود و دکمه‌ی اکشن مرتبط با دایرکتوری خاکستری باشد.

مجوزها

اندروید ۱۱ تغییرات زیر را در رابطه با مجوزهای ذخیره‌سازی معرفی می‌کند.

هر نسخه‌ای را هدف قرار دهید

اولین پنجره، لینکی به نام Allow in settings را نمایش می‌دهد.
شکل ۱. پنجره‌ای که نشان می‌دهد یک برنامه از فضای ذخیره‌سازی محدود استفاده می‌کند و مجوز READ_EXTERNAL_STORAGE را درخواست می‌کند.

تغییرات زیر در اندروید ۱۱، صرف نظر از نسخه SDK هدف برنامه شما، اعمال می‌شوند:

  • مجوز زمان اجرای Storage به Files & Media تغییر نام داده است.
  • اگر برنامه شما از فضای ذخیره‌سازی محدود خارج نشده باشد و مجوز READ_EXTERNAL_STORAGE را درخواست کند، کاربران در مقایسه با اندروید ۱۰، پنجره‌ی متفاوتی را مشاهده می‌کنند. این پنجره نشان می‌دهد که برنامه‌ی شما درخواست دسترسی به عکس‌ها و رسانه‌ها را دارد، همانطور که در شکل ۱ نشان داده شده است.

    کاربران می‌توانند در تنظیمات سیستم ببینند که کدام برنامه‌ها مجوز READ_EXTERNAL_STORAGE را دارند. در صفحه تنظیمات > حریم خصوصی > مدیریت مجوزها > فایل‌ها و رسانه‌ها ، هر برنامه‌ای که این مجوز را دارد، در زیر «مجاز برای همه فایل‌ها » فهرست شده است. اگر برنامه شما برای اندروید ۱۱ منتشر شده است، به خاطر داشته باشید که این دسترسی به «همه فایل‌ها» فقط خواندنی است. برای خواندن و نوشتن در همه فایل‌های موجود در فضای ذخیره‌سازی مشترک با استفاده از این برنامه، باید مجوز دسترسی به همه فایل‌ها را داشته باشید.

هدف قرار دادن اندروید ۱۱

اگر برنامه شما برای اندروید ۱۱ منتشر شده باشد، دیگر هیچ دسترسی اضافی توسط مجوزهای WRITE_EXTERNAL_STORAGE و WRITE_MEDIA_STORAGE ارائه نمی‌شود.

به خاطر داشته باشید که در دستگاه‌هایی که اندروید ۱۰ (سطح API 29) یا بالاتر را اجرا می‌کنند، برنامه شما می‌تواند بدون درخواست مجوزهای مربوط به ذخیره‌سازی، به مجموعه‌های رسانه‌ای کاملاً تعریف‌شده مانند MediaStore.Downloads کمک کند. درباره نحوه درخواست مجوزهای لازم هنگام کار با فایل‌های رسانه‌ای در برنامه خود بیشتر بدانید.

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

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

منابع اضافی

برای اطلاعات بیشتر در مورد تغییرات فضای ذخیره‌سازی در اندروید ۱۱، مطالب زیر را مشاهده کنید:

پست‌های وبلاگ

ویدیوها