
همونطور که از عنوان مشخصه دسترسی به external storage در اندروید 11 (API 30) به بالا دچار تغییراتی شده که ممکنه برای برنامه نویسان اندروید مشکلاتی در پی داشته باشه خصوصا اگر قرار باشه فایلی رو در حافظه ذخیره کنن یا بخوان از عکس یا فیلم و.. استفاده کنن.
به طور خلاصه بخوام بگم شما در اندروید 11 به بالا دیگه نمیتونید تو فایل های خارج از اپلیکیشنتون (همون فایل منیجر گوشیتون منظورمه) چیزی ذخیره کنید.
اول از ReadExternalStorage شروع می کنم که تبدیل شده به ReadMediaVideo, ReadMediaImage و ReadMediaAudio که اگر دسترسی دوتای اول رو بخواید با یک دیالوگ از کاربر گرفته میشه و برای سومی یک دیالوگ جدا نمایش داده میشه.
برای WriteExternalStorage هم دوتا راه وجود داره :
-- اول اینکه میتونید از دسترسی ManageExternalStorage استفاده کنید.فقط نکتش اینه اگر برنامه ای که نوشتید برای مثال آنتی ویروس یا همچین چیزی باشه میتونید از این دسترسی استفاده کنید چون اگر بخواید با همین دسترسی برنامه رو پابلیشش کنید گوگل بهتون گیر میده و باید دلیل خوبی براش بیارید تا قبول کنه.
-- دومین راه اینه که فایلی که میخواید رو تو Internal Storage ذخیره کنید.
یعنی یه دایرکتوری تو مسیر پکیج نیم اپلیکیشنتون ساخته میشه و نیازی به دسترسی هم نداره.
مثلا اینجوری
context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString.plus("/").plus(fileName)
نکته بعدی هم اینه که برای هندل دسترسی ها دیگه از OnActivityResult نمیشه استفاده کرد چون دپریکیت شده و به جاش باید با ActivityResultLauncher کار کنید.
این مطالب صرفا درک شخصی منه که سعی کردم مختصر و مفید باهاتون به اشتراک بذارم و اگر کم و کاستی داره خیلی خوشحال میشم بهم بگید و کاملش کنیم.
در نهایت لینک یک پروژه دانلود منیجر رو برای درک بهتر این موضوع میذارم که البته خودم ننوشتمش ولی مفیده.
https://github.com/devrath/ubiquitous-downloadmanager