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

‫Android 11 (میانای برنامه‌سازی کاربردی سطح ۳۰) پلاتفرم را بیشتر بهبود می‌بخشد و محافظت بهتری از برنامه و داده‌های کاربر در فضای ذخیره‌سازی خارجی ارائه می‌دهد. این نسخه چندین بهبود را معرفی می‌کند، ازجمله دسترسی به مسیر فایل خام، عملیات ویرایش دسته‌ای برای رسانه، و واسط کاربر به‌روزشده برای «چارچوب دسترسی به فضای ذخیره‌سازی».

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

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

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

حفظ سازگاری با Android 10

اگر برنامه‌تان هنگام اجرا در دستگاه‌های Android 10 از فضای ذخیره‌سازی محدودشده انصراف می‌دهد، توصیه می‌شود همچنان requestLegacyExternalStorage را روی true در فایل مانیفست برنامه‌تان تنظیم کنید. به‌این‌ترتیب، برنامه‌تان می‌تواند همچنان طبق انتظار در دستگاه‌های دارای Android 10 عمل کند.

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

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

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

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

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

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

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

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

فهرست راهنمای ویژه برنامه در فضای ذخیره‌سازی خارجی

از Android نسخه ۱۱، برنامه‌ها نمی‌توانند دایرکتوری مختص برنامه خودشان را در فضای ذخیره‌سازی خارجی ایجاد کنند. برای دسترسی به دایرکتوری‌ای که سیستم برای برنامه‌تان ارائه می‌دهد، getExternalFilesDirs() را فراخوانی کنید.

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

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

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

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

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

برای کمک به عملکرد روان‌تر برنامه‌تان با کتابخانه‌های رسانه‌ای شخص ثالث، Android 11 به شما امکان می‌دهد از میاناهای برنامه‌سازی کاربردی دیگری به‌غیراز میانای برنامه‌سازی کاربردی MediaStore برای دسترسی به فایل‌های رسانه‌ای از فضای ذخیره‌سازی مشترک بااستفاده از مسیرهای مستقیم فایل استفاده کنید. این میاناهای برنامه‌سازی کاربردی شامل موارد زیر است:

  • میانای برنامه‌سازی کاربردی File.
  • کتابخانه‌های بومی، مثل fopen().

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

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

دسترسی به دایرکتوری‌های داده در فضای ذخیره‌سازی داخلی

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

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

دسترسی به دایرکتوری‌های مختص برنامه در فضای ذخیره‌سازی خارجی

در Android نسخه ۱۱، برنامه‌ها دیگر نمی‌توانند به فایل‌های موجود در فهرست راهنمای اختصاصی و مختص برنامه هیچ برنامه دیگری در فضای ذخیره‌سازی خارجی دسترسی داشته باشند.

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

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

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

دیگر نمی‌توانید از کنش هدف 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 دایرکتوری نشان داده شود و دکمه کنش مرتبط با دایرکتوری خاکستری شده باشد.

اجازه‌ها

‫Android 11 تغییرات زیر را در رابطه با اجازه‌های فضای ذخیره‌سازی معرفی می‌کند.

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

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

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

  • اجازه زمان اجرای فضای ذخیره‌سازی به فایل‌ها و رسانه‌ها تغییر نام داده است.
  • اگر برنامه‌تان از فضای ذخیره‌سازی محدود انصراف نداده باشد و اجازه READ_EXTERNAL_STORAGE را درخواست کند، کاربران کادر گفتگوی متفاوتی نسبت به Android 10 می‌بینند. کادر گفتگو نشان می‌دهد که برنامه‌تان درخواست دسترسی به عکس‌ها و رسانه‌ها را دارد، همان‌طور که در شکل ۱ نشان داده شده است.

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

هدف Android 11

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

به‌خاطر داشته باشید که در دستگاه‌های دارای Android 10 (سطح API‏ ۲۹) یا بالاتر، برنامه‌تان می‌تواند بدون درخواست اجازه‌های مربوط به فضای ذخیره‌سازی، به مجموعه‌های رسانه‌ای کاملاً تعریف‌شده‌ای مثل MediaStore.Downloads کمک کند. درباره نحوه درخواست فقط اجازه‌های ضروری هنگام کار با فایل‌های رسانه‌ای در برنامه‌تان بیشتر بدانید.

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

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

منابع بیشتر

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

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

ویدیوها