يعزّز نظام التشغيل Android 11 (المستوى 30 من واجهة برمجة التطبيقات) النظام الأساسي بشكل أكبر، ما يوفّر حماية أفضل لبيانات التطبيقات والمستخدمين على مساحة التخزين الخارجية. يتضمّن هذا الإصدار العديد من التحسينات، مثل إمكانية الوصول إلى مسار الملفات الأولية، وعمليات التعديل المجمّع للوسائط، وواجهة مستخدم معدَّلة لإطار عمل "الوصول إلى مساحة التخزين".
يتضمّن الإصدار أيضًا تحسينات على مساحة التخزين المحصورة النطاق، ما يسهّل على المطوّرين تنفيذ حالات استخدام مساحة التخزين بعد نقل البيانات إلى نموذج مساحة التخزين هذا.
فرض استخدام ميزة "التخزين المحصور"
يمكن للتطبيقات التي تعمل على الإصدار 11 من نظام التشغيل Android ولكنها تستهدف الإصدار 10 (المستوى 29 لواجهة برمجة التطبيقات) أن تطلب السمة requestLegacyExternalStorage
. يسمح هذا الخيار للتطبيقات بالتوقف مؤقتًا عن استخدام
التغييرات المرتبطة
بالتخزين المحصور النطاق، مثل منح إذن الوصول إلى أدلة مختلفة وأنواع مختلفة من ملفات الوسائط. بعد تعديل تطبيقك ليصبح متوافقًا مع Android 11، سيتجاهل النظام العلامة requestLegacyExternalStorage
.
الحفاظ على التوافق مع Android 10
إذا كان تطبيقك لا يستخدم ميزة "مساحة التخزين المحصورة" عند تشغيله على أجهزة Android 10، ننصحك بمواصلة ضبط قيمة requestLegacyExternalStorage
على true
في ملف بيان تطبيقك. بهذه الطريقة، يمكن أن يستمر تطبيقك في العمل على النحو المتوقّع على الأجهزة التي تعمل بنظام التشغيل Android 10.
نقل البيانات إلى أدلة مرئية عند استخدام مساحة التخزين المحصورة
إذا كان تطبيقك يستخدم نموذج التخزين القديم وكان يستهدف الإصدار 10 من نظام التشغيل Android أو إصدارًا أقدم، قد يتم تخزين البيانات في دليل لا يمكن لتطبيقك الوصول إليه عند تفعيل نموذج التخزين المحصور النطاق. قبل استهداف الإصدار 11 من نظام التشغيل Android، عليك نقل البيانات إلى دليل متوافق مع ميزة "مساحة التخزين المحصورة".
اختبار التخزين المحصور النطاق
لتفعيل ميزة "التخزين المحصور النطاق" في تطبيقك، بغض النظر عن إصدار حزمة تطوير البرامج (SDK) المستهدَفة وقيم علامات البيان، فعِّل علامات توافق التطبيق التالية:
DEFAULT_SCOPED_STORAGE
(مفعَّلة لجميع التطبيقات تلقائيًا)FORCE_ENABLE_SCOPED_STORAGE
(غير مفعَّلة لجميع التطبيقات تلقائيًا)
لإيقاف ميزة "التخزين النطاقي" واستخدام نموذج التخزين القديم بدلاً منها، عليك إلغاء ضبط كلتا العلامتين.
إدارة مساحة التخزين في الجهاز
بدءًا من نظام التشغيل Android 11، يمكن للتطبيقات التي تستخدم نموذج التخزين المحصور الوصول إلى ملفات ذاكرة التخزين المؤقت الخاصة بها فقط. إذا كان تطبيقك بحاجة إلى إدارة مساحة التخزين على الجهاز، اتّبِع التعليمات حول كيفية الاستعلام عن المساحة الحرة.
- تحقَّق من المساحة الخالية من خلال استدعاء إجراء النية
ACTION_MANAGE_STORAGE
. إذا لم تتوفّر مساحة فارغة كافية على الجهاز، اطلب من المستخدم منح تطبيقك الإذن بمسح جميع الذاكرات المؤقتة. لإجراء ذلك، استدعِ إجراء النية
ACTION_CLEAR_APP_CACHE
.
دليل خاص بالتطبيق على وحدة التخزين الخارجية
بدءًا من نظام التشغيل Android 11، لا يمكن للتطبيقات إنشاء
دليل خاص بالتطبيق على مساحة التخزين الخارجية. للوصول إلى الدليل الذي يوفّره النظام لتطبيقك، استدعِ الدالة getExternalFilesDirs()
.
الوصول إلى ملفات الوسائط
لتسهيل الوصول إلى الوسائط مع الحفاظ على خصوصية المستخدم، يضيف نظام التشغيل Android 11 الإمكانات التالية.
تنفيذ عمليات مجمّعة
لضمان التناسق بين الأجهزة وتوفير المزيد من الراحة للمستخدمين، يضيف نظام التشغيل Android 11 عدة طرق تسهّل إدارة مجموعات ملفات الوسائط.
الوصول إلى الملفات باستخدام مسارات الملفات المباشرة والمكتبات الأصلية
لمساعدة تطبيقك على العمل بسلاسة أكبر مع مكتبات الوسائط التابعة لجهات خارجية، يتيح لك نظام التشغيل Android 11 استخدام واجهات برمجة تطبيقات أخرى غير واجهة MediaStore
API للوصول إلى ملفات الوسائط من وحدة التخزين المشتركة باستخدام مسارات الملفات المباشرة. تشمل واجهات برمجة التطبيقات هذه ما يلي:
- واجهة برمجة التطبيقات
File
- المكتبات الأصلية، مثل
fopen()
الوصول إلى البيانات من تطبيقات أخرى
لحماية خصوصية المستخدمين، يفرض النظام قيودًا إضافية على وصول تطبيقك إلى الدلائل الخاصة بالتطبيقات الأخرى على الأجهزة التي تعمل بنظام التشغيل Android 11 أو الإصدارات الأحدث.
الوصول إلى أدلة البيانات في مساحة التخزين الداخلية
بدأ نظام التشغيل Android 9 (المستوى 28 من واجهة برمجة التطبيقات) في فرض قيود على التطبيقات التي يمكنها إتاحة الملفات في أدلة البيانات على وحدة التخزين الداخلية للتطبيقات الأخرى. لا يمكن للتطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث أن تتيح الوصول إلى الملفات في أدلة البيانات الخاصة بها من أي مكان.
يوسّع نظام التشغيل Android 11 نطاق هذا القيد. إذا كان تطبيقك يستهدف نظام التشغيل Android 11، لا يمكنه الوصول إلى الملفات في أي دليل بيانات لتطبيق آخر، حتى إذا كان التطبيق الآخر يستهدف الإصدار 8.1 من نظام التشغيل Android (المستوى 27 من واجهة برمجة التطبيقات) أو إصدارًا أقدم وكان قد أتاح إمكانية قراءة الملفات في دليل البيانات لأي مستخدم.
الوصول إلى أدلة خاصة بالتطبيق على وحدة التخزين الخارجية
في نظام التشغيل Android 11، لم يعُد بإمكان التطبيقات الوصول إلى الملفات في أي دليل مخصّص خاص بالتطبيق ضمن وحدة التخزين الخارجية.
قيود الوصول إلى المستندات
لمنح المطوّرين وقتًا للاختبار، لن تسري التغييرات التالية المتعلّقة بإطار عمل "الوصول إلى مساحة التخزين" (SAF) إلا إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث.
الوصول إلى الأدلة
لم يعُد بإمكانك استخدام إجراء النية
ACTION_OPEN_DOCUMENT_TREE
لطلب الوصول إلى الدلائل التالية:
- الدليل الجذر لوحدة التخزين الداخلية
- تمثّل هذه السمة الدليل الجذر لكل وحدة تخزين على بطاقة SD يرى مصنّع الجهاز أنّها موثوقة، بغض النظر عمّا إذا كانت البطاقة محاكية أو قابلة للإزالة. والمقصود بوحدة التخزين الموثوقة هي تلك التي يمكن للتطبيق الوصول إليها بنجاح في معظم الأوقات.
- دليل
Download
الوصول إلى الملفات
لم يعُد بإمكانك استخدام إجراء النية
ACTION_OPEN_DOCUMENT_TREE
أو
ACTION_OPEN_DOCUMENT
لطلب أن يختار المستخدم ملفات فردية من الأدلة التالية:
- دليل
Android/data/
وجميع الأدلة الفرعية - دليل
Android/obb/
وجميع الأدلة الفرعية
اختبار التغيير
لاختبار هذا التغيير في السلوك، اتّبِع الخطوات التالية:
- استدعاء غرض باستخدام الإجراء
ACTION_OPEN_DOCUMENT
تأكَّد من عدم ظهور الدليلَينAndroid/data/
وAndroid/obb/
. - نفِّذ أيًّا مما يلي:
- فعِّل علامة
RESTRICT_STORAGE_ACCESS_FRAMEWORK
توافق التطبيقات. - استهداف الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث
- فعِّل علامة
- استدعاء غرض باستخدام الإجراء
ACTION_OPEN_DOCUMENT_TREE
تأكَّد من ظهور دليلDownload
وأنّ زر الإجراء المرتبط بالدليل غير مفعّل.
الأذونات
يقدّم نظام التشغيل Android 11 التغييرات التالية المتعلّقة بأذونات التخزين.
استهداف أي إصدار
READ_EXTERNAL_STORAGE
.تسري التغييرات التالية في نظام التشغيل Android 11، بغض النظر عن إصدار حزمة SDK المستهدَف في تطبيقك:
- تمت إعادة تسمية إذن وقت التشغيل مساحة التخزين ليصبح الملفات والوسائط.
إذا لم يتم إيقاف ميزة "التخزين المحصور" في تطبيقك وكان التطبيق يطلب الإذن
READ_EXTERNAL_STORAGE
، سيظهر للمستخدمين مربّع حوار مختلف عن مربّع الحوار الذي يظهر في نظام التشغيل Android 10. يشير مربّع الحوار إلى أنّ تطبيقك يطلب الوصول إلى الصور والوسائط، كما هو موضّح في الشكل 1.يمكن للمستخدمين معرفة التطبيقات التي لديها إذن
READ_EXTERNAL_STORAGE
في إعدادات النظام. في صفحة الإعدادات > الخصوصية > مدير الأذونات > الملفات والوسائط، يتم إدراج كل تطبيق لديه الإذن ضمن مسموح به لجميع الملفات. إذا كان تطبيقك يستهدف الإصدار Android 11، يُرجى العِلم أنّ إذن الوصول إلى "جميع الملفات" هذا يتيح القراءة فقط. لقراءة وكتابة جميع الملفات في وحدة التخزين المشتركة باستخدام هذا التطبيق، يجب أن يكون لديك إذن الوصول إلى جميع الملفات.
استهداف الإصدار 11 من نظام التشغيل Android
إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android، لن يوفّر كل من إذن WRITE_EXTERNAL_STORAGE
وإذن WRITE_MEDIA_STORAGE
المميز أي إذن وصول إضافي.
يُرجى العِلم أنّه على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android (المستوى 29 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، يمكن لتطبيقك المساهمة في مجموعات الوسائط المحدّدة جيدًا، مثل MediaStore.Downloads
، بدون طلب أي أذونات متعلقة بالتخزين. يمكنك الاطّلاع على مزيد من المعلومات حول كيفية طلب الأذونات الضرورية فقط عند العمل مع ملفات الوسائط في تطبيقك.
الوصول إلى كل الملفات
يمكن لمعظم التطبيقات التي تتطلّب الوصول إلى مساحة التخزين المشتركة اتّباع أفضل الممارسات المتعلّقة بمشاركة ملفات الوسائط ومشاركة الملفات غير المرتبطة بالوسائط. ومع ذلك، تتضمّن بعض التطبيقات حالة استخدام أساسية تتطلّب الوصول إلى نطاق واسع من الملفات على الجهاز، ولكن لا يمكنها إجراء ذلك بكفاءة باستخدام أفضل الممارسات المتوافقة مع الخصوصية المتعلّقة بمساحة التخزين. يوفّر نظام التشغيل Android إذن وصول خاص للتطبيقات يُسمى الوصول إلى جميع الملفات لهذه الحالات. لمزيد من المعلومات، اطّلِع على الدليل حول كيفية إدارة جميع الملفات على جهاز تخزين.
مراجع إضافية
لمزيد من المعلومات حول التغييرات التي طرأت على مساحة التخزين في Android 11، يمكنك الاطّلاع على المواد التالية: