راهنمای مبتدیان: محدوده ذخیره سازی در اندروید 11

راهنمای مبتدیان: محدوده ذخیره سازی در اندروید 11


تغییر دسترسی به فضای ذخیره‌سازی Android 10 برای Android 11 اجباری می‌شود. این وبلاگ برای فضای ذخیره‌سازی است. چگونه می توانیم به آن دسترسی داشته باشیم و این برای برنامه ما چه معنایی دارد؟

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

(1) مخزن با دامنه کاربرد: دسترسی به دایرکتوری های ذخیره سازی خارجی به دایرکتوری های خاص برنامه و انواع رسانه های خاص برنامه محدود می شود.

(2) مجوزهای بازنشانی خودکار: اگر کاربران چندین ماه با برنامه تعامل نداشته باشند، سیستم به طور خودکار مجوزهای حساس برنامه را بازنشانی می کند.

(3) دسترسی به موقعیت مکانی پس زمینه: کاربران باید به تنظیمات سیستم هدایت شوند تا برای مکان پس‌زمینه برنامه‌ها مجوز بگیرند.

(4) قابلیت مشاهده بسته: هنگامی که یک برنامه در لیست برنامه های نصب شده روی دستگاه جستجو می کند، لیست برگشتی فیلتر می شود.

ساختار ذخیره سازی قبل از اندروید نسخه 10:

قبل از اجرای این بخش، ابتدا بیایید نحوه سازماندهی داده ها قبل از اندروید 10 را درک کنیم:

ذخیره سازی خصوصی: همه برنامه ها دایرکتوری خصوصی خود را در حافظه داخلی دارند، به عنوان مثال. نام / داده / بسته Android از برنامه های دیگر قابل مشاهده نیست.

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

ساختار فعلی و مسائل دسترسی:

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

آیا تا به حال نگران داده های حساس بوده ایم؟ به عنوان مثال، آیا همه برنامه های نصب شده روی دستگاه شما به نسخه های پزشکی یا اسناد بانکی دسترسی دارند؟

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

گوگل دو دلیل خوب برای ایجاد این تغییر ارائه می دهد: کاهش باقی مانده ها و “انسداد برنامه ها” برای امنیت.

انتساب بهتر:

یک برنامه کاربردی دسترسی به بلوک های ذخیره سازی با داده های برنامه مربوطه را فراهم می کند.

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

ذخیره سازی خصوصی مانند قبل است. مخزن مشترک بیشتر به رسانه ها و مجموعه ای از دانلودها که فایل های رسانه ای نیستند تقسیم می شود.

ساختار ذخیره سازی را در اندروید 10 به بعد ببینید:

کاهش شلوغی فایل:

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

جلوگیری از سوء استفاده از مجوز READ_EXTERNAL_STORAGE:

مجوز READ_EXTERNAL_STORAGE برای برنامه ما به کل برنامه از حافظه خارجی دسترسی پیدا کردیم، جایی که مواردی مانند عکس‌ها، اسناد خصوصی، ویدیوها و سایر فایل‌های بالقوه حساس را ذخیره می‌کنیم. Scoped Storage در اندروید 11 چیست؟

محدوده ذخیره سازی در اندروید فقط برنامه را اعمال می کند. ما می‌توانیم داده‌های آنها را در پوشه‌ها و انواع خاصی از رسانه‌ها مانند فایل‌های موسیقی با استفاده از سایر APIهای ذخیره‌سازی ببینیم.

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

برنامه ها برای دسترسی به فایل ها از یک مخزن با محدوده به چه مجوزهایی نیاز دارند؟

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

  1. برنامه ها به حافظه خارجی و داخلی خود برای عملیات مجوز نوشتن و خواندن دسترسی خواهند داشت.
  2. تا زمانی که فایل در مجموعه سازماندهی شده ذخیره می شود، برنامه ها دسترسی محدودی به ارائه فایل های Media & NonMedia نخواهند داشت.
  3. مجموعه رسانه ارائه شده توسط برنامه های کاربردی دیگر بر اساس مجوز استفاده شده از “READ_STORAGE_PERMISSION” قابل دسترسی است. در اصل، مجوز “WRITE_STORAGE_PERMISSION” از نسخه بعدی رد می شود و در صورت استفاده، مانند “READ_STORAGE_PERMISSION” عمل می کند.
  4. فایل های غیر رسانه ای ارائه شده توسط برنامه های کاربردی دیگر را می توان از طریق Storage Access Framework API دسترسی داشت. هیچ مجوز صریحی لازم نیست. این بدان معنا نیست که برنامه ها به همه دایرکتوری های Root، Android / Data، دایرکتوری دانلود دسترسی دارند. هنگامی که کاربر به کاربر اجازه دسترسی داد، دسترسی کامل به خواندن، تغییر، حذف خواهد داشت.

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

بیایید درک و نحوه اعمال آن را ببینیم:

عملیات ذخیره سازی:

فایل را انتخاب کنید: این ACTION_OPEN_DOCUMENT سپس برنامه انتخاب فایل سیستم را باز می کند تا به کاربر اجازه دهد فایل مورد نظر را برای باز کردن انتخاب کند.

const val PICK_PDF_FILE = 2

fun openFile(pickerInitialUri: uri) {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }
    startActivityForResult(intent, PICK_PDF_FILE)
}

پوشه را انتخاب کنید: این “ACTION_OPEN_DOCUMENT” در حال استفاده است، با ACTION_OPEN_DOCUMENT_TREE جایگزین شده است.

fun openDirectory(pickerInitialUri: Uri) {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
        flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }

    startActivityForResult(intent, your-request-code)
}

فایل را ایجاد کنید: از این “ACTION_CREATE_DOCUMENT” برای ذخیره فایل در یک مکان خاص استفاده می کند.

const val CREATE_FILE = 1

private fun createFile(pickerInitialUri: Uri) {
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(Intent.EXTRA_TITLE, "invoice.pdf")
        putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri)
    }
    startActivityForResult(intent, CREATE_FILE)
}

نتیجه

در این وبلاگ مراحل مورد نیاز برای دسترسی و استقرار فضای ذخیره سازی برای برنامه اندروید 10 و جدیدتر خود را خواهید آموخت. این به شما این امکان را می دهد که حریم خصوصی کاربران خود را بهبود ببخشید و در عین حال از ازدحام دستگاه های آنها بکاهید. برای وبلاگ های عالی تر از مهندسان DEV IT ما، لطفاً وب سایت ما را بررسی کنید.

راهنمای مبتدیان: ذخیره سازی جامع در اندروید 11 اولین بار در مجله DEV IT ظاهر شد.