حالات استخدام مساحة التخزين على Android وأفضل الممارسات المتعلِّقة بها

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

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

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

التعامل مع ملفات الوسائط

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

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

عرض ملفات الصور أو الفيديوهات من مجلدات متعددة

الاستعلام عن مجموعة وسائط باستخدام واجهة برمجة التطبيقات query() لفلترة ملفات الوسائط أو ترتيبها، اضبط المَعلمات projection وselection وselectionArgs وsortOrder.

عرض الصور أو الفيديوهات من مجلد معيّن

اتّبِع هذا النهج:

  1. اتّبِع أفضل الممارسات الموضّحة في مقالة طلب أذونات التطبيق، واطلب إذن READ_EXTERNAL_STORAGE.
  2. استرداد ملفات الوسائط استنادًا إلى قيمة MediaColumns.DATA، التي تحتوي على المسار المطلق لنظام الملفات إلى ملف الوسائط على القرص

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

لإنشاء ملف وسائط أو تعديله، لا تستخدِم العمود DATA. بدلاً من ذلك، استخدِم العمودَين DISPLAY_NAME وRELATIVE_PATH.

الوصول إلى معلومات الموقع الجغرافي من الصور

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

تحديد موقع تخزين المحتوى الذي يتم تنزيله حديثًا

إذا كان تطبيقك يستخدم ميزة "التخزين الفرعي"، يُرجى الانتباه إلى الموقع الجغرافي الذي تختاره لتخزين ملفات الوسائط التي يتم تنزيلها.

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

على الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث، لا يمكن للتطبيقات الأخرى الوصول إلى الملفات داخل الدليل الخارجي الخاص بالتطبيق، حتى إذا كنت تستخدم DownloadManager لجلب هذه الملفات.

تصدير ملفات وسائط المستخدم إلى جهاز

حدِّد موقعًا جغرافيًا تلقائيًا مناسبًا لتخزين ملفات وسائط المستخدم:

تعديل ملفات وسائط متعددة أو حذفها في عملية واحدة

يمكنك دمج المنطق استنادًا إلى إصدارات Android التي يعمل عليها تطبيقك.

يعمل بنظام التشغيل Android 11

اتّبِع هذا النهج:

  1. أنشئ intent مؤجّلة لطلب الكتابة أو الحذف في تطبيقك باستخدام MediaStore.createWriteRequest() أو MediaStore.createTrashRequest() ثم اطلب من المستخدم الإذن بتعديل مجموعة من الملفات من خلال استدعاء هذه الـ intent.
  2. تقييم ردّ المستخدم:

    • إذا تم منح الإذن، يمكنك المتابعة في عملية التعديل أو الحذف.
    • إذا لم يتم منح الإذن، اشرح للمستخدم سبب حاجة الميزة في تطبيقك إلى الإذن.

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

يعمل بنظام التشغيل Android 10

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

تعمل بنظام التشغيل Android 9 أو إصدار أقدم

اتّبِع هذا النهج:

  1. اتّبِع أفضل الممارسات الموضّحة في مقالة طلب أذونات التطبيق، واطلب إذن WRITE_EXTERNAL_STORAGE.
  2. استخدِم واجهة برمجة التطبيقات MediaStore لتعديل ملفات الوسائط أو حذفها.

استيراد صورة واحدة حالية

عندما تريد استيراد صورة واحدة حالية (على سبيل المثال، لاستخدامها كصورة للملف الشخصي لمستخدم)، يمكن لتطبيقك إما استخدام واجهة المستخدم الخاصة به لإجراء العملية أو استخدام أداة الاختيار المضمّنة بالنظام.

عرض واجهة المستخدم الخاصة بك

اتّبِع هذا النهج:

  1. اتّبِع أفضل الممارسات الموضّحة في مقالة طلب أذونات التطبيق، واطلب إذن READ_EXTERNAL_STORAGE.
  2. استخدِم واجهة برمجة التطبيقات query() للاستعلام عن مجموعة وسائط.
  3. عرض النتائج في واجهة المستخدم المخصّصة لتطبيقك

استخدام أداة الاختيار المضمّنة بالنظام

استخدِم الغرض ACTION_GET_CONTENT الذي يطلب من المستخدم اختيار صورة لاستيرادها.

إذا أردت فلترة أنواع الصور التي تعرضها أداة اختيار مضمّنة بالنظام للمستخدم ليختار من بينها، يمكنك استخدام setType() أو EXTRA_MIME_TYPES.

التقاط صورة واحدة

عندما تريد التقاط صورة واحدة لاستخدامها في تطبيقك (على سبيل المثال، لاستخدامها كصورة للملف الشخصي للمستخدم)، استخدِم الغرض ACTION_IMAGE_CAPTURE لطلب التقاط صورة من المستخدم باستخدام كاميرا الجهاز. يخزّن النظام الصورة التي تم التقاطها في جدول MediaStore.Images.

مشاركة ملفات الوسائط مع تطبيقات أخرى

استخدِم الطريقة insert() لإضافة السجلّات مباشرةً إلى MediaStore. لمزيد من المعلومات، يُرجى الاطّلاع على قسم إضافة عنصر في دليل تخزين الوسائط.

مشاركة ملفات الوسائط مع تطبيق معيّن

استخدِم مكوّن Android FileProvider، كما هو موضّح في دليل إعداد مشاركة الملفات.

الوصول إلى الملفات من الرموز أو المكتبات التي تستخدم مسارات الملفات المباشرة

يمكنك دمج المنطق استنادًا إلى إصدارات Android التي يعمل عليها تطبيقك.

يعمل بنظام التشغيل Android 11

اتّبِع هذا النهج:

  1. اتّبِع أفضل الممارسات الموضّحة في مقالة طلب أذونات التطبيق، واطلب إذن READ_EXTERNAL_STORAGE.
  2. الوصول إلى الملفات باستخدام مسارات الملفات المباشرة

لمزيد من المعلومات، يُرجى الاطّلاع على القسم حول كيفية فتح ملفات الوسائط باستخدام مسارات الملفات المباشرة.

يعمل بنظام التشغيل Android 10

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

الأجهزة التي تعمل بنظام التشغيل Android 9 أو إصدار أقدم

اتّبِع هذا النهج:

  1. اتّبِع أفضل الممارسات الموضّحة في مقالة طلب أذونات التطبيق، واطلب إذن WRITE_EXTERNAL_STORAGE.
  2. الوصول إلى الملفات باستخدام مسارات الملفات المباشرة

التعامل مع الملفات غير المتعلقة بالوسائط

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

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

فتح ملف مستند

استخدِم الغرض ACTION_OPEN_DOCUMENT لطلب اختيار ملف من المستخدم لفتحه باستخدام أداة اختيار مضمّنة بالنظام. إذا أردت فلترة أنواع الملفات التي ستعرضها أداة الاختيار المضمّنة بالنظام للمستخدم ليختار من بينها، يمكنك استخدام setType() أو EXTRA_MIME_TYPES.

على سبيل المثال، يمكنك العثور على جميع ملفات PDF وODT وTXT باستخدام التعليمة البرمجية التالية:

Kotlin

startActivityForResult(
        Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            addCategory(Intent.CATEGORY_OPENABLE)
            type = "*/*"
            putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
                    "application/pdf", // .pdf
                    "application/vnd.oasis.opendocument.text", // .odt
                    "text/plain" // .txt
            ))
        },
        REQUEST_CODE
      )

Java

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
                "application/pdf", // .pdf
                "application/vnd.oasis.opendocument.text", // .odt
                "text/plain" // .txt
        });
        startActivityForResult(intent, REQUEST_CODE);

الكتابة في الملفات على وحدات التخزين الثانوية

تشمل وحدات التخزين الثانوية بطاقات SD. يمكنك الوصول إلى معلومات حول وحدة تخزين معيّنة باستخدام فئة StorageVolume.

يمكنك دمج المنطق استنادًا إلى إصدار Android الذي يعمل عليه تطبيقك.

يعمل بنظام التشغيل Android 11

اتّبِع هذا النهج:

  1. استخدِم نموذج التخزين الفرعي.
  2. استهداف الإصدار Android 10 (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم
  3. يجب تضمين الإذن WRITE_EXTERNAL_STORAGE في نموذج البيان.
  4. نفِّذ أحد أنواع الوصول التالية:
    • الوصول إلى الملفات باستخدام واجهة برمجة التطبيقات MediaStore
    • الوصول المباشر إلى مسار الملف باستخدام واجهات برمجة التطبيقات، مثل File أو fopen()

التشغيل على الإصدارات القديمة

استخدِم إطار عمل أذونات الوصول إلى مساحة التخزين الذي يسمح للمستخدمين باختيار الموقع الجغرافي على وحدة تخزين ثانوية حيث يمكن لتطبيقك كتابة الملف.

نقل الملفات الحالية من موقع تخزين قديم

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

الاحتفاظ بإمكانية الوصول إلى موقع التخزين القديم لنقل البيانات

يحتاج تطبيقك إلى الاحتفاظ بإمكانية الوصول إلى موقع التخزين القديم من أجل نقل أي ملفات خاصة بالتطبيق إلى المواقع التي يمكن الوصول إليها باستخدام ميزة "التخزين الفرعي". تعتمد الطريقة التي يجب استخدامها على مستوى واجهة برمجة التطبيقات المستهدف في تطبيقك.

إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android
  1. اضبط العلامة preserveLegacyExternalStorage على true من أجل الاحتفاظ بنموذج مساحة التخزين القديم حتى يتمكّن تطبيقك من نقل بيانات المستخدم عند الترقية إلى الإصدار الجديد من تطبيقك الذي يستهدف Android 11.

  2. مواصلة إيقاف ميزة "التخزين الفرعي" حتى يتمكّن تطبيقك من مواصلة الوصول إلى ملفاتك في موقع التخزين القديم على أجهزة Android 10

إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android

إيقاف ميزة "مساحة التخزين المحدودة" لتسهيل الحفاظ على سلوك تطبيقك في جميع إصدارات Android

نقل بيانات التطبيق

عندما يكون تطبيقك جاهزًا لنقل البيانات، اتّبِع الخطوات التالية:

  1. استهداف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم
  2. إيقاف ميزة "التخزين الفرعي" لكي يتمكّن تطبيقك من الوصول إلى الملفات التي تريد نقلها
  3. نشر الرمز البرمجي الذي يستخدم واجهة برمجة التطبيقات File لنقل الملفات من موقعها الحالي ضمن /sdcard/ إلى موقع يمكن الوصول إليه باستخدام التخزين الفرعي:

    1. انقل أي ملفات تطبيقات خاصة إلى الدليل الذي تعرضه الطريقة getExternalFilesDir().
    2. انقل أي ملفات مشتركة غير وسائط إلى دليل فرعي مخصّص للتطبيق في دليل Downloads/.
  4. أزِل أدلة التخزين القديمة لتطبيقك من الدليل /sdcard/.

بعد أن يثبّت المستخدمون الإصدار الجديد من تطبيقك، عليهم إكمال عملية نقل البيانات على أجهزتهم. يمكنك مراقبة عملية نقل البيانات في قاعدة المستخدمين من خلال إنشاء حدث إحصاءات.

بعد أن ينقل المستخدمون بياناتهم، يمكنك نشر تحديث آخر لتطبيقك يستهدف الإصدار Android 11.

مشاركة المحتوى مع تطبيقات أخرى

لمشاركة ملفات تطبيقك مع تطبيق آخر واحد، استخدِم FileProvider. بالنسبة إلى التطبيقات التي تحتاج جميعها إلى مشاركة الملفات في ما بينها، ننصحك باستخدام أداة توفير المحتوى لكل تطبيق، ثم مزامنة البيانات عند إضافة التطبيقات إلى المجموعة.

تخزين الملفات غير الوسائط مؤقتًا

يعتمد النهج الذي يجب استخدامه على نوع الملفات التي تحتاج إلى تخزينها مؤقتًا.

  • الملفات الصغيرة أو الملفات التي تحتوي على معلومات حساسة: استخدِم Context#getCacheDir().
  • الملفات الكبيرة أو الملفات التي لا تحتوي على معلومات حساسة: استخدِم Context#getExternalCacheDir().

تصدير الملفات غير المتعلقة بالوسائط إلى جهاز

حدِّد موقعًا جغرافيًا تلقائيًا مناسبًا لتخزين الملفات غير الوسائط. السماح للمستخدمين بتصدير الملفات من الأدلة الخاصة بالتطبيقات إلى موقع يمكن الوصول إليه بشكل عام استخدِم عمليات التنزيل أو مجموعات المستندات في MediaStore لتصدير الملفات غير المتعلقة بالوسائط إلى الجهاز.

التعامل مع الملفات الخاصة بالتطبيق

إذا كان تطبيقك ينشئ ملفات لا تحتاج التطبيقات الأخرى إلى الوصول إليها أو لا يُفترض أن تصل إليها، يمكنك تخزين هذه الملفات في مواقع تخزين خاصة بالتطبيق.

أدلة وحدة التخزين الداخلية

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

أدلة التخزين الخارجية

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

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

عندما يلغي المستخدم تثبيت تطبيقك، تتم إزالة الملفات المحفوظة في مساحة التخزين المخصّصة للتطبيق، وبالتالي، يجب عدم استخدام مساحة التخزين هذه لحفظ أي ملفات يتوقع المستخدم أن تظل محفوظة بشكل مستقل عن تطبيقك.

إيقاف ميزة "مساحة التخزين المُخصَّصة" مؤقتًا

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

إيقاف الميزة في الاختبارات

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

إذا كان الاختبار يُخرج ملفات للمضيف، مثل لقطات الشاشة أو بيانات تصحيح الأخطاء أو بيانات التغطية أو مقاييس الأداء، يمكنك كتابة هذه الملفات في الأدلة العامة. لإجراء ذلك، أضِف العلامة التالية إلى حزمة الاختبار ذات الصلة التي تستدعي am instrument:

-e no-isolated-storage 1

تؤثر هذه العلامة في جميع سلوكيات إطار الاختبار الذي تم قياسه، وتؤثر في جميع رموز الاختبار التي تم استدعاؤها. لذلك، عند استخدام هذه العلامة، لا يمكنك التحقّق من توافق تطبيقك مع ميزة "تخزين فرعي". بالنسبة إلى مخرجات الاختبار، من الأفضل الكتابة في مساحة التخزين الفرعي على مستوى التطبيق التي يمكن لبرنامج shell قراءتها. يمكنك بعد ذلك سحب هذا الدليل على مستوى التطبيق. لتحديد الدليل الذي سيتم السحب منه، يمكنك استدعاء getExternalMediaDirs().

إيقاف الميزة في تطبيق الإصدار العلني

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

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
       Android 10. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

لاختبار سلوك تطبيق يستهدف الإصدار 10 من نظام التشغيل Android أو الإصدارات الأقدم عند استخدام مساحة التخزين المحدودة، يمكنك تفعيل السلوك من خلال ضبط قيمة requestLegacyExternalStorage على false. إذا كنت تختبر تطبيقك على جهاز يعمل بنظام التشغيل Android 11، يمكنك أيضًا استخدام علامات توافق التطبيقات لاختبار سلوك تطبيقك مع ميزة "مساحة التخزين المُخصَّصة" أو بدونها.

مراجع إضافية

لمزيد من المعلومات حول مساحة التخزين على Android، يُرجى الاطّلاع على المراجع التالية:

منشورات المدوّنات