يستخدم نظام التشغيل Android نظام ملفات مشابهًا لأنظمة الملفات المستندة إلى القرص على منصّات أخرى. يقدّم لك النظام عدة خيارات لحفظ بيانات تطبيقك:
- مساحة التخزين الخاصة بالتطبيق: يمكنك تخزين الملفات المخصّصة لاستخدام تطبيقك فقط، سواء في أدلة مخصّصة ضمن وحدة تخزين داخلية أو أدلة مختلفة مخصّصة ضمن مساحة تخزين خارجية. استخدِم الأدلة ضمن مساحة التخزين الداخلية لحفظ المعلومات الحسّاسة التي لا يُسمَح للتطبيقات الأخرى بالوصول إليها.
- مساحة التخزين المشتركة: تخزين الملفات التي يريد تطبيقك مشاركتها مع التطبيقات الأخرى، بما في ذلك الوسائط والمستندات وغيرها من الملفات
- الإعدادات المفضّلة: تخزين البيانات الأولية والخاصة في أزواج مفتاح/قيمة
- قواعد البيانات: تخزين البيانات المنظَّمة في قاعدة بيانات خاصة باستخدام مكتبة Room للحفاظ على البيانات
تم تلخيص خصائص هذه الخيارات في الجدول التالي:
نوع المحتوى | طريقة الوصول | الأذونات المطلوبة | هل يمكن للتطبيقات الأخرى الوصول إلى هذه البيانات؟ | هل تتم إزالة الملفات عند إلغاء تثبيت التطبيق؟ | |
---|---|---|---|---|---|
ملفّات متعلقة بالتطبيق | الملفات المخصّصة لاستخدام تطبيقك فقط | من وحدة التخزين الداخلية، انقر على getFilesDir() أو
getCacheDir() من وحدة التخزين الخارجية، انقر على getExternalFilesDir() أو
getExternalCacheDir() . |
لا تكون هذه الأذونات مطلوبة أبدًا لوحدة التخزين الداخلية لا تكون هذه الأذونات مطلوبة لوحدة التخزين الخارجية عند استخدام تطبيقك على الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (المستوى 19 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث |
لا | نعم |
الوسائط | ملفات الوسائط القابلة للمشاركة (الصور والملفات الصوتية والفيديوهات) | MediaStore واجهة برمجة التطبيقات |
READ_EXTERNAL_STORAGE عند الوصول إلى ملفات تطبيقات أخرى على
نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) أو إصدار أحدثREAD_EXTERNAL_STORAGE أو WRITE_EXTERNAL_STORAGE
عند الوصول إلى ملفات تطبيقات أخرى على Android 10 (المستوى 29 لواجهة برمجة التطبيقات)تكون الأذونات مطلوبة لجميع الملفات على Android 9 (المستوى 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".
مصادر إضافية
لمزيد من المعلومات عن تخزين البيانات، يُرجى الاطّلاع على المراجع التالية.