لمنح المستخدمين المزيد من التحكّم في ملفاتهم والحدّ من تشوّش الملفات، قدّمت الإصدار 10 من نظام التشغيل Android نموذجًا جديدًا لمساحة التخزين خاصًا بالتطبيقات يُعرف باسم التخزين الفرعي. تغيّر ميزة "نطاق التخزين" طريقة تخزين التطبيقات للملفات والوصول إليها في وحدة التخزين الخارجية للجهاز. لمساعدتك في نقل تطبيقك إلى دعم التخزين الفرعي، اتّبِع أفضل الممارسات لحالات الاستخدام الشائعة لمساحة التخزين الموضّحة في هذا الدليل. يتم تنظيم حالات الاستخدام في فئتَين: التعامل مع ملفات الوسائط والتعامل مع الملفات غير الوسائط.
في كثير من الحالات، ينشئ تطبيقك ملفات لا تحتاج التطبيقات الأخرى إلى الوصول إليها أو لا يجب أن تصل إليها. يوفّر النظام مواقع تخزين خاصة بالتطبيقات لإدارة هذه الملفات.
لمزيد من المعلومات حول كيفية تخزين الملفات والوصول إليها على Android، يُرجى الاطّلاع على أدلة التدريب حول مساحة التخزين.
التعامل مع ملفات الوسائط
يوضّح هذا القسم بعض حالات الاستخدام الشائعة للتعامل مع ملفات الوسائط (ملفات الفيديو والصور والصوت)، ويشرح النهج العام الذي يمكن أن يستخدمه تطبيقك. يلخّص الجدول التالي كل حالة من حالات الاستخدام هذه، ويتضمّن روابط تؤدي إلى كل قسم من الأقسام التي تتضمّن المزيد من التفاصيل.
| حالة الاستخدام | ملخّص |
|---|---|
| عرض جميع ملفات الصور أو الفيديو | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| عرض الصور أو الفيديوهات من مجلد معيّن | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| الوصول إلى معلومات الموقع الجغرافي من الصور | استخدِم إحدى الطريقتَين إذا كان تطبيقك يستخدِم ميزة "التخزين الفرعي". استخدِم طريقة مختلفة إذا كان تطبيقك يوقف ميزة "التخزين الفرعي". |
| تحديد موقع التخزين لعمليات التنزيل الجديدة | استخدِم إحدى الطريقتَين إذا كان تطبيقك يستخدِم ميزة "التخزين الفرعي". استخدِم طريقة مختلفة إذا كان تطبيقك يوقف ميزة "التخزين الفرعي". |
| تصدير ملفات وسائط المستخدم إلى جهاز | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| تعديل ملفات وسائط متعددة أو حذفها في عملية واحدة | استخدام طريقة واحدة لنظام التشغيل Android 11 في نظام التشغيل Android 10، يمكنك إيقاف ميزة "مساحة التخزين المحصورة" واستخدام الطريقة المخصّصة للإصدار 9 من نظام التشغيل Android والإصدارات الأقدم بدلاً من ذلك. |
| استيراد صورة واحدة موجودة | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| التقاط صورة واحدة | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| مشاركة ملفات الوسائط مع تطبيقات أخرى | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| مشاركة ملفات الوسائط مع تطبيق محدّد | اتّبِع النهج نفسه مع جميع إصدارات Android. |
| الوصول إلى الملفات من الرموز أو المكتبات التي تستخدم مسارات الملفات المباشرة | استخدام طريقة واحدة لنظام التشغيل Android 11 في نظام التشغيل Android 10، يمكنك إيقاف ميزة "مساحة التخزين المحصورة" واستخدام الطريقة المخصّصة للإصدار 9 من نظام التشغيل Android والإصدارات الأقدم بدلاً من ذلك. |
عرض ملفات الصور أو الفيديو من مجلدات متعددة
طلب البحث عن مجموعة وسائط
باستخدام واجهة برمجة التطبيقات query() لفلترة ملفات الوسائط أو ترتيبها، عدِّل المَعلمات projection وselection وselectionArgs وsortOrder.
عرض الصور أو الفيديوهات من مجلد معيّن
اتّبِع الخطوات التالية:
- اتّبِع أفضل الممارسات الموضّحة في طلب أذونات التطبيق، واطلب إذن
READ_EXTERNAL_STORAGE. - استرداد ملفات الوسائط استنادًا إلى قيمة
MediaColumns.DATA، التي تحتوي على مسار نظام الملفات المطلق إلى عنصر الوسائط على القرص
ملاحظة: عند الوصول إلى ملف وسائط حالي، يمكنك استخدام قيمة العمود DATA في منطقك. ويرجع ذلك إلى أنّ هذه القيمة تتضمّن مسار ملف صالحًا.
ومع ذلك، لا تفترض أنّ الملف متاح دائمًا. استعد للتعامل مع أي أخطاء في الإدخال/الإخراج المستند إلى الملفات قد تحدث.
لإنشاء ملف وسائط أو تعديله، لا تستخدِم العمود DATA. بدلاً من ذلك، استخدِم العمودَين DISPLAY_NAME وRELATIVE_PATH.
الوصول إلى معلومات الموقع الجغرافي من الصور
إذا كان تطبيقك يستخدم التخزين الفرعي، اتّبِع الخطوات الواردة في قسم معلومات الموقع الجغرافي في الصور من دليل تخزين الوسائط.
تحديد مكان التخزين لعمليات التنزيل الجديدة
إذا كان تطبيقك يستخدم ميزة "التخزين الفرعي"، عليك الانتباه إلى الموقع الذي تختار تخزين ملفات الوسائط التي تنزّلها فيه.
إذا كانت التطبيقات الأخرى تتطلّب الوصول إلى الملفات، ننصحك باستخدام مجموعات وسائط محددة جيدًا لعمليات التنزيل أو مجموعات المستندات.
في نظام التشغيل Android 11 والإصدارات الأحدث، لا يمكن للتطبيقات الأخرى الوصول إلى الملفات داخل الدليل الخارجي الخاص بالتطبيق، حتى إذا كنت تستخدم DownloadManager لجلب هذه الملفات.
تصدير ملفات وسائط المستخدم إلى جهاز
تحديد موقع جغرافي تلقائي مناسب لتخزين ملفات الوسائط الخاصة بالمستخدمين:
- السماح للمستخدمين باختيار ما إذا كانوا يريدون أن تكون ملفات الوسائط قابلة للقراءة من خلال تطبيقات أخرى أو لا، وذلك باستخدام مساحة التخزين الخاصة بالتطبيق أو مساحة التخزين المشتركة
- السماح للمستخدمين بتصدير الملفات من الأدلة الخاصة بالتطبيقات إلى موقع يمكن الوصول إليه بشكل عام استخدِم مجموعات الصور والفيديوهات والملفات الصوتية في MediaStore لتصدير ملفات الوسائط إلى معرض الصور على الجهاز.
تعديل ملفات وسائط متعددة أو حذفها في عملية واحدة
تضمين منطق يستند إلى إصدارات Android التي يعمل عليها تطبيقك
تعمل على نظام التشغيل Android 11
اتّبِع الخطوات التالية:
- أنشئ intent مؤجّلة لطلب الكتابة أو الحذف في تطبيقك باستخدام
MediaStore.createWriteRequest()أوMediaStore.createTrashRequest()، ثم اطلب من المستخدم الإذن بتعديل مجموعة من الملفات من خلال استدعاء هذه الـ intent. تقييم ردّ المستخدم:
- إذا تم منح الإذن، يمكنك المتابعة لإجراء عملية التعديل أو الحذف.
- إذا لم يتم منح الإذن، عليك توضيح سبب حاجة الميزة في تطبيقك إلى هذا الإذن.
تعرَّف على مزيد من المعلومات عن كيفية إدارة مجموعات ملفات الوسائط باستخدام هذه الطرق المتاحة على نظام التشغيل Android 11 والإصدارات الأحدث.
على نظام التشغيل Android 10
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات)، عليك إيقاف ميزة "التخزين الفرعي" ومواصلة استخدام الطريقة المتاحة في الإصدار 9 من نظام التشغيل Android والإصدارات الأقدم لتنفيذ هذه العملية.
يعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم
اتّبِع الخطوات التالية:
- اتّبِع أفضل الممارسات الموضّحة في طلب أذونات التطبيق، واطلب إذن
WRITE_EXTERNAL_STORAGE. - استخدِم واجهة برمجة التطبيقات
MediaStoreلتعديل ملفات الوسائط أو حذفها.
استيراد صورة واحدة سبق أن تم استيرادها
عندما تريد استيراد صورة واحدة حالية (على سبيل المثال، لاستخدامها كصورة لملف شخصي)، يمكن لتطبيقك استخدام واجهة المستخدم الخاصة به لإجراء العملية، أو يمكنه استخدام أداة اختيار مضمّنة بالنظام.
عرض واجهة المستخدم الخاصة بك
اتّبِع الخطوات التالية:
- اتّبِع أفضل الممارسات الموضّحة في طلب أذونات التطبيق، واطلب إذن
READ_EXTERNAL_STORAGE. - استخدِم
query()API للاستعلام عن مجموعة وسائط. - عرض النتائج في واجهة المستخدم المخصّصة لتطبيقك
استخدام أداة اختيار مضمّنة بالنظام
استخدِم الغرض ACTION_GET_CONTENT الذي يطلب من المستخدم اختيار صورة لاستيرادها.
إذا أردت فلترة أنواع الصور التي تعرضها أداة اختيار مضمّنة بالنظام للمستخدم ليختار من بينها، يمكنك استخدام setType() أو EXTRA_MIME_TYPES.
التقاط صورة واحدة
عندما تريد التقاط صورة واحدة لاستخدامها في تطبيقك (على سبيل المثال، لاستخدامها كصورة لملف المستخدم الشخصي)، استخدِم الغرض ACTION_IMAGE_CAPTURE لطلب التقاط صورة باستخدام كاميرا الجهاز. يخزّن النظام الصورة التي تم التقاطها في جدول MediaStore.Images.
مشاركة ملفات الوسائط مع تطبيقات أخرى
استخدِم طريقة
insert()
لإضافة السجلات مباشرةً إلى MediaStore. لمزيد من المعلومات، يُرجى الاطّلاع على قسم إضافة عنصر في دليل تخزين الوسائط.
مشاركة ملفات وسائط مع تطبيق محدّد
استخدِم مكوِّن FileProvider في Android، كما هو موضّح في دليل إعداد مشاركة الملفات.
الوصول إلى الملفات من الرموز أو المكتبات التي تستخدم مسارات الملفات المباشرة
تضمين منطق يستند إلى إصدارات Android التي يعمل عليها تطبيقك
تعمل على نظام التشغيل Android 11
اتّبِع الخطوات التالية:
- اتّبِع أفضل الممارسات الموضّحة في طلب أذونات التطبيق، واطلب إذن
READ_EXTERNAL_STORAGE. - الوصول إلى الملفات باستخدام مسارات الملفات المباشرة
لمزيد من المعلومات، راجِع القسم حول كيفية فتح ملفات الوسائط باستخدام مسارات الملفات المباشرة.
على نظام التشغيل Android 10
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات)، عليك إيقاف ميزة "التخزين الفرعي" ومواصلة استخدام الطريقة المتاحة في الإصدار 9 من نظام التشغيل Android والإصدارات الأقدم لتنفيذ هذه العملية.
يعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأقدم
اتّبِع الخطوات التالية:
- اتّبِع أفضل الممارسات الموضّحة في طلب أذونات التطبيق، واطلب إذن
WRITE_EXTERNAL_STORAGE. - الوصول إلى الملفات باستخدام مسارات الملفات المباشرة
التعامل مع الملفات غير المتعلقة بالوسائط
يوضّح هذا القسم بعض حالات الاستخدام الشائعة للتعامل مع الملفات غير الوسائط، ويشرح النهج العام الذي يمكن أن يستخدمه تطبيقك. يلخّص الجدول التالي كل حالة من حالات الاستخدام هذه، ويتضمّن روابط تؤدي إلى كل قسم من الأقسام التي تحتوي على مزيد من التفاصيل.
| حالة الاستخدام | ملخّص |
|---|---|
| فتح ملف مستند | اتّبِع النهج نفسه مع جميع إصدارات 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
اتّبِع الخطوات التالية:
- استخدِم نموذج التخزين الفرعي.
- استهداف الإصدار 10 من نظام التشغيل Android (المستوى 29 لواجهة برمجة التطبيقات) أو إصدار أقدم
- أدرِج إذن
WRITE_EXTERNAL_STORAGEفي بيان التطبيق. - نفِّذ أحد أنواع الوصول التالية:
- الوصول إلى الملفات باستخدام واجهة برمجة التطبيقات
MediaStore - الوصول إلى مسار الملف المباشر باستخدام واجهات برمجة التطبيقات، مثل
Fileأوfopen()
- الوصول إلى الملفات باستخدام واجهة برمجة التطبيقات
التشغيل على إصدارات قديمة
استخدِم إطار عمل أذونات الوصول إلى مساحة التخزين الذي يتيح للمستخدمين اختيار الموقع الجغرافي على وحدة تخزين ثانوية يمكن لتطبيقك كتابة الملف فيها.
نقل الملفات الحالية من موقع تخزين قديم
يُعدّ الدليل موقع تخزين قديمًا إذا لم يكن دليلاً خاصًا بالتطبيق أو دليلاً مشتركًا متاحًا للجميع. إذا كان تطبيقك ينشئ ملفات أو يستخدمها في موقع تخزين قديم، ننصحك بنقل ملفات تطبيقك إلى مواقع يمكن الوصول إليها باستخدام ميزة "التخزين الفرعي" وإجراء أي تغييرات ضرورية على التطبيق للعمل مع الملفات في "التخزين الفرعي".
الحفاظ على إمكانية الوصول إلى موقع التخزين القديم لنقل البيانات
يحتاج تطبيقك إلى الاحتفاظ بإذن الوصول إلى موقع التخزين القديم من أجل نقل أي ملفات للتطبيق إلى مواقع يمكن الوصول إليها باستخدام ميزة "التخزين الفرعي". يعتمد النهج الذي يجب اتّباعه على مستوى واجهة برمجة التطبيقات المستهدَف لتطبيقك.
إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android
اضبط العلامة
preserveLegacyExternalStorageعلىtrueللحفاظ على نموذج التخزين القديم كي يتمكّن تطبيقك من نقل بيانات المستخدم عند الترقية إلى الإصدار الجديد من تطبيقك الذي يستهدف Android 11.يمكنك مواصلة إيقاف ميزة "التخزين الفرعي" حتى يتمكّن تطبيقك من مواصلة الوصول إلى ملفاتك في موقع التخزين القديم على أجهزة Android 10.
إذا كان تطبيقك يستهدف الإصدار 10 من نظام التشغيل Android
إيقاف ميزة "مساحة التخزين المحصورة" لتسهيل الحفاظ على سلوك تطبيقك في جميع إصدارات Android
نقل بيانات التطبيق
عندما يكون تطبيقك جاهزًا لنقل البيانات، اتّبِع الأسلوب التالي:
- استهداف الإصدار 10 أو إصدار أقدم من Android
- إيقاف ميزة "التخزين الفرعي" حتى يتمكّن تطبيقك من الوصول إلى الملفات التي تحتاج إلى نقلها
-
يمكنك تفعيل رمز برمجي يستخدم واجهة برمجة التطبيقات
Fileلنقل الملفات من موقعها الحالي ضمن/sdcard/إلى موقع يمكن الوصول إليه باستخدام التخزين الفرعي:- انقل أي ملفات تطبيقات خاصة إلى الدليل الذي يتم عرضه من خلال الطريقة
getExternalFilesDir(). - نقل أي ملفات مشترَكة غير خاصة بالوسائط إلى دليل فرعي مخصّص للتطبيق ضمن الدليل
Downloads/
- انقل أي ملفات تطبيقات خاصة إلى الدليل الذي يتم عرضه من خلال الطريقة
- أزِل أدلة التخزين القديمة لتطبيقك من الدليل
/sdcard/.
بعد أن يثبِّت المستخدمون الإصدار الجديد من تطبيقك، يكملون عملية نقل البيانات على أجهزتهم. يمكنك مراقبة عملية نقل البيانات على مستوى قاعدة المستخدمين من خلال إنشاء حدث إحصائي.
بعد أن ينقل المستخدمون بياناتهم، يمكنك نشر تحديث آخر لتطبيقك يستهدف الإصدار Android 11.
مشاركة المحتوى مع تطبيقات أخرى
لمشاركة ملفات تطبيقك مع تطبيق آخر واحد، استخدِم
FileProvider. بالنسبة إلى التطبيقات التي تحتاج إلى مشاركة الملفات مع بعضها البعض، ننصح باستخدام موفّر محتوى لكل تطبيق، ثم مزامنة البيانات عند إضافة التطبيقات إلى المجموعة.
تخزين الملفات غير المرتبطة بالوسائط مؤقتًا
يعتمد النهج الذي يجب اتّباعه على نوع الملفات التي تحتاج إلى تخزينها مؤقتًا.
- الملفات الصغيرة أو الملفات التي تحتوي على معلومات حساسة: استخدِم
Context#getCacheDir(). - الملفات الكبيرة أو الملفات التي لا تحتوي على معلومات حساسة: استخدِم
Context#getExternalCacheDir().
تصدير ملفات غير مرتبطة بالوسائط إلى جهاز
تحديد موقع جغرافي تلقائي مناسب لتخزين الملفات غير المرتبطة بالوسائط السماح للمستخدمين بتصدير الملفات من الأدلة الخاصة بالتطبيقات إلى موقع يمكن الوصول إليه بشكل عام استخدِم عمليات التنزيل أو مجموعات المستندات في MediaStore لتصدير الملفات غير المرتبطة بالوسائط إلى الجهاز.
التعامل مع الملفات الخاصة بالتطبيقات
إذا كان تطبيقك ينشئ ملفات لا تحتاج التطبيقات الأخرى إلى الوصول إليها أو لا يجب أن تصل إليها، يمكنك تخزين هذه الملفات في مواقع تخزين خاصة بالتطبيق.
أدلة وحدة التخزين الداخلية
يمنع النظام التطبيقات الأخرى من الوصول إلى هذه المواقع الجغرافية، ويتم تشفيرها على الإصدار 10 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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، اطّلِع على المواد التالية: