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

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

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

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

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

من وحدة التخزين الخارجية، getExternalFilesDir() أو getExternalCacheDir()
غير مطلوب مطلقًا لمساحة التخزين الداخلية

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

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

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

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

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

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

ويوفر 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. يمكنك الاطّلاع على الدليل حول كيفية إدارة جميع الملفات على جهاز تخزين لمعرفة المزيد من المعلومات حول هذا الإذن والسبب في أنّ معظم التطبيقات لا تحتاج إلى الإفصاح عنه لتلبية حالات الاستخدام الخاصة بها.

التخزين الفرعي

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

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

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

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

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

مراجع إضافية

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

الفيديوهات الطويلة