حافظه داخلی و حافظه خارجی در اندروید به زبان ساده

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

  • چه زمانی از حافظه داخلی و چه زمانی از حافظه خارجی برای ذخیره فایل استفاده کنیم؟
  • اگر بخواهیم بعد از حذف اپ فایل های ایجاد شده در گوشی باقی بمانند آنها را باید چطور ذخیره کنیم؟
  • با چه روشی بدون نیاز به دسترسی storage از حافظه خارجی استفاده کنیم؟
  • اگر نخواهیم خود کاربر هم بیرون از اپ فایل های ذخیره شده را مشاهده کند آنها را باید چگونه ذخیره کنیم؟

حافظه داخلی

اپ اندروید میتواند روی حافظه داخلی و حافظه خارجی گوشی فایل هایی را ذخیره کند. اگه فایل را روی حافظه داخلی ذخیره کند فقط خود اپ میتواند به آن فایل دسترسی داشته باشد. حتی کاربر هم خارج از اپ برای مثال با استفاده از file explorer نمیتواند آنها را ببیند مگر اینکه دسترسی روت داشته باشد. فایل هایی که در حافظه داخلی ذخیره میشوند با پاک شدن اپ به طور اتوماتیک حذف میشوند.

ذخیره فایل در حافظه داخلی

getFilesDir و getCacheDir متدهایی هستند که با استفاده از آنها میتوانید فایل در حافظه داخلی ذخیره کنید. برای ذخیره فایل در حافظه داخلی گوشی لازم نیست که اپ دسترسی storage داشته باشد. فایل هایی که با getFilesDir ذخیره شده باشند تا زمانی که خود اپ آنها را پاک نکرده باشد باقی میمانند ولی فایلهایی که با getCacheDir ذخیره شده باشند اگر گوشی با کمبود حافظه مواجه شود به طور اتوماتیک آنها را حذف میکند. خود کاربر هم میتواند از قسمت تنظیمات اپ با استفاده از clear cache فایل های ذخیره شده در کش داخلی را پاک کند.

حافظه خارجی

علاوه بر حافظه داخلی اپ میتواند در حافظه خارجی هم فایل ذخیره کند. منظور از حافظه خارجی گوشی اون حافظه ای است که وقتی گوشی را به کامپیوتر وصل میکنید نشان داده میشود و فایل هایش قابل دسترسی هستند. با توجه به نوع گوشی حافظه خارجی میتواند قسمتی از حافظه داخلی باشد و یا کارت حافظه خارجی(sd card). امروزه بیشتر گوشی ها دو تا حافظه خارجی دارند یکی قسمتی از حافظه داخلی است و یکی هم خود sd card است. برای مثال وقتی گوشی را میخرید گفته میشود که این گوشی خودش ۸ گیگ حافظه دارد و برای حافظه بیشتر میتوانید از کارت حافظه استفاده کنید.

Environment.isExternalStorageEmulated اگر true برگرداند یعنی این گوشی یک حافظه خارجی دارد که قسمتی از حافظه داخلی است. نکته مهم هنگام استفاده از حافظه خارجی این است که فایل های ذخیره شده در آن توسط اپ های دیگر هم میتوانند مورد استفاده قرار گیرند.

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

ذخیره فایل در حافظه خارجی

متدهای getExternalFilesDir و getExternalCacheDir برای ذخیره فایل در حافظه خارجی استفاده میشوند.  برای گوشی هایی که بیشتر از یک حافظه خارجی دارند میتوان از متدهای getExternalCacheDirs و getExternalFilesDirs استفاده کرد که یک آرایه برمیگردانند. این متدها از api19 اضافه شده اند. اگه گوشی ۲ تا حافظه خارجی داشته باشند آرایه ای که این متدها برمیگردانند ۲ تا آیتم دارد که آیتم اول منطبق با خروجی ای است که توسط متدهای getExternalFilesDir و getExternalCacheDir برگردانده میشود. آیتم دوم برای ذخیره فایل در کارت حافظه استفاده میشود.

اگر شما یک گوشی داشته باشید که ۸ گیگ حافظه داخلی و ۱۶ گیگ کارت حافظه داشته باشد هنگامی که با file explorer فایل های گوشی را بررسی میکنید یک گزینه internal storage مشاهده میکنید که همان ۸ گیگ است و یک گزینه external storage که همان ۱۶ گیگ است. getExternalFilesDir و getExternalCacheDir فایل ها را در حافظه خارجی که قسمتی از حافظه داخلی است ذخیره میکنند یعنی همان ۸ گیگ. دقت کنید چون موقع استفاده از file explorer اسم حافظه خارجی که قسمتی از حافظه داخلی است internal storage است آن را با حافظه داخلی که در بالا دربارش صحبت کردیم اشتباه نکنید.

در api های قبل از ۱۹ شما برای اینکه فایل هایی که مخصوص خود اپ هستند را در حافظه خارجی ذخیره کنید نیاز به دسترسی storage دارید. ولی برای api 19 و بالاتر نیاز به دسترسی storage نیست. منظور از فایل هایی که مخصوص خود اپ هستند آنهایی هستند که در مسیر android/data/package_name ذخیره میشوند.

بنابراین اگر برنامه شما قراره برای api های کمتر از ۱۹ کار کنه با اضافه کردن android:maxSdkVersion به <uses-permission> دسترسی storage را فقط برای api های کمتر از ۱۹بگیرید. فایل هایی که مخصوص خود اپ هستند و در حافظه خارجی ذخیره میشوند نیز با پاک شدن اپ حذف میشوند.

ذخیره فایل در حافظه خارجی به صورت پابلیک

اگر اپ شما بخواهد در حافظه خارجی و در مسیری جز مسیر android/data/package_name فایلی را ذخیره کند باید حتما دسترسی storage داشته باشد. با استفاده از Environment.getExternalStorageDirectory و Environment.getExternalStoragePublicDirectory میتوانید در حافظه خارجی و در مسیری جز android/data/package_name فایل ذخیره کنید.

خلاصه مطالب گفته شده به صورت تصویر

تصویر زیر خلاصه مطالب گفته شده را نشان میدهد.

عکس خلاصه مطالب

درباره نویسنده

پست های مرتبط

2 نظر

  1. محمد رجبی

    سلام
    مثل بقیه اموزش ها خیلی شیوا و تمیز و قابل فهم
    ممنون بابت به اشتراک گذاشتن دانشون و همینطور برای سایت خوبتون
    امیدوارم این اموزش ها ادامه داشته باشه
    لطفا اموزش اپلود و دانلود فایلهای صوتی و تصویری با استفاده از volley و Retrofit2 رو هم قرار بدین ممنون

    پاسخ

پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

پنج + 6 =