نظرة عامة على تخزين الملفات والبيانات

يستخدم نظام التشغيل Android نظام ملفات مشابهًا لأنظمة ملفات تستند إلى القرص على منصات أخرى. يوفّر النظام عدة خيارات لحفظ بيانات تطبيقك:

  • مساحة التخزين الخاصة بالتطبيق: يتم تخزين الملفات المخصّصة لاستخدام تطبيقك فقط، إما في أدلة مخصّصة ضمن وحدة تخزين داخلية أو في أدلة مخصّصة مختلفة ضمن وحدة تخزين خارجية. استخدِم الدلائل داخل مساحة التخزين الداخلية لحفظ المعلومات الحسّاسة التي لا يجب أن تصل إليها التطبيقات الأخرى.
  • مساحة التخزين المشترَكة: لتخزين الملفات التي ينوي تطبيقك مشاركتها مع تطبيقات أخرى، بما في ذلك الوسائط والمستندات والملفات الأخرى
  • الإعدادات المفضّلة: تخزِّن هذه الفئة بيانات أولية خاصة في أزواج مفتاح/قيمة.
  • قواعد البيانات: يمكنك تخزين البيانات المنظَّمة في قاعدة بيانات خاصة باستخدام مكتبة Room لتخزين البيانات.

يتم تلخيص خصائص هذه الخيارات في الجدول التالي:

نوع المحتوى طريقة الوصول الأذونات المطلوبة هل يمكن للتطبيقات الأخرى الوصول إلى هذه البيانات؟ هل تتم إزالة الملفات عند إلغاء تثبيت التطبيق؟
الملفات الخاصة بالتطبيق الملفات المخصّصة لاستخدام تطبيقك فقط من وحدة التخزين الداخلية، getFilesDir() أو getCacheDir()

من وحدة التخزين الخارجية، getExternalFilesDir() أو getExternalCacheDir()
لا يكون هذا الإذن مطلوبًا أبدًا لوحدة التخزين الداخلية

ولا يكون مطلوبًا لوحدة التخزين الخارجية عند استخدام تطبيقك على الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث
لا نعم
الوسائط ملفات الوسائط القابلة للمشاركة (الصور والملفات الصوتية والفيديوهات) MediaStore واجهة برمجة التطبيقات READ_EXTERNAL_STORAGE عند الوصول إلى ملفات التطبيقات الأخرى على الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث

READ_EXTERNAL_STORAGE أو WRITE_EXTERNAL_STORAGE عند الوصول إلى ملفات التطبيقات الأخرى على الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات)

يجب الحصول على الأذونات لجميع الملفات على الإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم
نعم، ولكن يجب أن يكون لدى التطبيق الآخر إذن READ_EXTERNAL_STORAGE. لا
المستندات والملفات الأخرى أنواع أخرى من المحتوى القابل للمشاركة، بما في ذلك الملفات التي تم تنزيلها إطار عمل الوصول إلى مساحة التخزين ما مِن قيود مفروضة نعم، من خلال أداة اختيار ملفات النظام لا
الإعدادات المفضّلة للتطبيقات أزواج المفتاح/القيمة مكتبة Jetpack Preferences ما مِن قيود مفروضة لا نعم
قاعدة البيانات البيانات المنظَّمة مكتبة Room لتخزين البيانات ما مِن قيود مفروضة لا نعم

يعتمد الحلّ الذي تختاره على احتياجاتك المحدّدة:

ما هي المساحة التي تحتاج إليها بياناتك؟
تتوفّر مساحة محدودة في وحدة التخزين الداخلية لبيانات التطبيقات. استخدِم أنواعًا أخرى من مساحة التخزين إذا كنت بحاجة إلى حفظ كمية كبيرة من البيانات.
ما مدى موثوقية الوصول إلى البيانات؟
إذا كانت الوظيفة الأساسية لتطبيقك تتطلّب بيانات معيّنة، مثلما يحدث عند بدء تشغيل تطبيقك، ضَع البيانات في دليل وحدة التخزين الداخلية أو في قاعدة بيانات. لا يمكن الوصول دائمًا إلى الملفات الخاصة بالتطبيق والمخزَّنة في وحدة التخزين الخارجية، لأنّ بعض الأجهزة تسمح للمستخدمين بإزالة جهاز مادي يتوافق مع وحدة التخزين الخارجية.
ما نوع البيانات التي تحتاج إلى تخزينها؟
إذا كانت لديك بيانات لا صلة لها إلا بتطبيقك، استخدِم مساحة التخزين الخاصة بالتطبيق. بالنسبة إلى محتوى الوسائط القابل للمشاركة، استخدِم مساحة التخزين المشترَكة لكي تتمكّن التطبيقات الأخرى من الوصول إلى المحتوى. بالنسبة إلى البيانات المنظَّمة، استخدِم الإعدادات المفضّلة (للبيانات التي تتضمّن مفتاحًا وقيمة) أو قاعدة بيانات (للبيانات التي تتضمّن أكثر من عمودَين).
هل يجب أن تكون البيانات خاصة بتطبيقك؟
عند تخزين بيانات حساسة، أي بيانات لا يجب أن يكون من الممكن الوصول إليها من أي تطبيق آخر، استخدِم وحدة التخزين الداخلية أو الإعدادات المفضّلة أو قاعدة بيانات. تتميّز وحدة التخزين الداخلية بأنّ البيانات مخفية عن المستخدمين.

فئات مواقع التخزين

يوفر نظام التشغيل Android نوعَين من مواقع التخزين الفعلي: وحدة التخزين الداخلية ووحدة التخزين الخارجية. في معظم الأجهزة، تكون مساحة التخزين الداخلية أصغر من مساحة التخزين الخارجية. ومع ذلك، تتوفّر مساحة التخزين الداخلية دائمًا على جميع الأجهزة، ما يجعلها مكانًا أكثر موثوقية لتخزين البيانات التي يعتمد عليها تطبيقك.

تظهر وحدات التخزين القابلة للإزالة، مثل بطاقة SD، في نظام الملفات كجزء من وحدة التخزين الخارجية. يمثّل نظام التشغيل Android هذه الأجهزة باستخدام مسار، مثل /sdcard.

يتم تخزين التطبيقات نفسها في وحدة التخزين الداخلية تلقائيًا. إذا كان حجم حزمة APK كبيرًا جدًا، يمكنك الإشارة إلى خيار مفضّل ضمن ملف البيان الخاص بتطبيقك لتثبيت تطبيقك على وحدة تخزين خارجية بدلاً من ذلك:

<manifest ...
  android:installLocation="preferExternal">
  ...
</manifest>

الأذونات والوصول إلى مساحة التخزين الخارجية

يحدّد نظام التشغيل Android أذونات ذات صلة بمساحة التخزين، وهي: READ_EXTERNAL_STORAGE وWRITE_EXTERNAL_STORAGE وMANAGE_EXTERNAL_STORAGE.

في الإصدارات السابقة من Android، كان على التطبيقات الإفصاح عن الإذن READ_EXTERNAL_STORAGE للوصول إلى أي ملف خارج الأدلة الخاصة بالتطبيق في وحدة التخزين الخارجية. بالإضافة إلى ذلك، كان على التطبيقات الإفصاح عن إذن WRITE_EXTERNAL_STORAGE للكتابة في أي ملف خارج الدليل الخاص بالتطبيق.

تعتمد إصدارات Android الأحدث بشكل أكبر على الغرض من الملف بدلاً من موقعه الجغرافي لتحديد إمكانية وصول التطبيق إلى ملف معيّن والكتابة فيه. على وجه الخصوص، إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، لن يكون للإذن WRITE_EXTERNAL_STORAGE أي تأثير على إمكانية وصول تطبيقك إلى مساحة التخزين. يحسّن نموذج التخزين المستند إلى الغرض خصوصية المستخدمين، لأنّه يمنح التطبيقات إذن الوصول فقط إلى مساحات نظام الملفات على الجهاز التي تستخدمها فعليًا.

يقدّم الإصدار Android 11 الإذن MANAGE_EXTERNAL_STORAGE الذي يتيح إمكانية الكتابة إلى الملفات خارج الدليل الخاص بالتطبيق وMediaStore. لمزيد من المعلومات حول هذا الإذن وسبب عدم حاجة معظم التطبيقات إلى الإفصاح عنه لتنفيذ حالات الاستخدام، يُرجى الاطّلاع على الدليل حول كيفية إدارة جميع الملفات على جهاز تخزين.

التخزين المحصور النطاق

لمنح المستخدمين المزيد من التحكّم في ملفاتهم والحدّ من تشوّش الملفات، يتم تلقائيًا منح التطبيقات التي تستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) والإصدارات الأحدث إذن وصول محدود إلى مساحة التخزين الخارجية، أو التخزين الفرعي. ولا يمكن لهذه التطبيقات الوصول إلا إلى الدليل الخاص بالتطبيق على مساحة التخزين الخارجية، بالإضافة إلى أنواع معيّنة من الوسائط التي أنشأها التطبيق.

استخدِم ميزة "التخزين المحصور النطاق" ما لم يكن تطبيقك بحاجة إلى الوصول إلى ملف مخزَّن خارج دليل خاص بالتطبيق وخارج دليل يمكن لواجهات برمجة التطبيقات MediaStore الوصول إليه. إذا كنت تخزِّن ملفات خاصة بالتطبيق على وحدة تخزين خارجية، يمكنك تسهيل استخدام ميزة "التخزين الفرعي" من خلال وضع هذه الملفات في دليل خاص بالتطبيق على وحدة التخزين الخارجية. بهذه الطريقة، سيظل تطبيقك قادرًا على الوصول إلى هذه الملفات عند تفعيل ميزة "التخزين النطاقي".

لإعداد تطبيقك لاستخدام ميزة "مساحة التخزين المحصورة"، يمكنك الاطّلاع على دليل حالات استخدام مساحة التخزين وأفضل الممارسات. إذا كان لتطبيقك حالة استخدام أخرى لا تغطيها ميزة "مساحة التخزين المحصورة"، يمكنك تقديم طلب للحصول على هذه الميزة. يمكنك إيقاف استخدام مساحة التخزين المحصورة مؤقتًا.

عرض الملفات على جهاز

لعرض الملفات المخزَّنة على جهاز، استخدِم مستكشف ملفات الجهاز في "استوديو Android".

مراجع إضافية

لمزيد من المعلومات حول تخزين البيانات، يُرجى الرجوع إلى المراجع التالية.

الفيديوهات