يعمل الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) على تحسين النظام الأساسي بشكل أكبر، ما يوفّر حماية أفضل لبيانات التطبيقات والمستخدمين على وحدة التخزين الخارجية. يقدّم هذا الإصدار العديد من التحسينات، مثل الوصول إلى مسار الملفات الأوّلية وعمليات التحرير المجمّع للوسائط وواجهة مستخدم معدَّلة لإطار عمل الوصول إلى مساحة التخزين.
يوفّر الإصدار أيضًا تحسينات على مساحة التخزين المحدودة النطاق، ما يسهّل على المطوّرين تلبية حالات استخدام مساحة التخزين بعد نقل بياناتهم لاستخدام نموذج مساحة التخزين هذا.
فرض استخدام مساحة التخزين المحدودة
لا يزال بإمكان التطبيقات التي تعمل على الإصدار 11 من نظام التشغيل Android ولكنها تستهدف الإصدار 10 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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(غير مفعَّلة لجميع التطبيقات تلقائيًا)
لإيقاف ميزة "التخزين الفرعي" واستخدام نموذج مساحة التخزين القديم بدلاً منها، يجب إلغاء ضبط كلتا العلامتَين.
إدارة مساحة التخزين في الجهاز
بدءًا من الإصدار 11 من نظام التشغيل Android، يمكن للتطبيقات التي تستخدم نموذج التخزين الفرعي الوصول إلى ملفات ذاكرة التخزين المؤقت الخاصة بها فقط. إذا كان تطبيقك بحاجة إلى إدارة مساحة التخزين على الجهاز، يُرجى اتّباع التعليمات حول كيفية الاستعلام عن المساحة المتوفّرة.
- تحقَّق من توفُّر مساحة خالية من خلال استدعاء إجراء intent
ACTION_MANAGE_STORAGE. إذا لم تتوفّر مساحة فارغة كافية على الجهاز، اطلب من المستخدم منح تطبيقك الموافقة على محو جميع بيانات ذاكرة التخزين المؤقت. لإجراء ذلك، استدعِ إجراء intent
ACTION_CLEAR_APP_CACHE.
دليل خاص بالتطبيق على وحدة تخزين خارجية
اعتبارًا من الإصدار Android 11، لا يمكن للتطبيقات إنشاء دليل خاص بها على وحدة التخزين الخارجية. للوصول إلى الدليل الذي يوفّره النظام لتطبيقك، يمكنك استدعاء getExternalFilesDirs().
الوصول إلى ملفات الوسائط
لتسهيل الوصول إلى الوسائط مع الحفاظ على خصوصية المستخدم، يضيف Android 11 الإمكانات التالية.
تنفيذ عمليات مجمّعة
لتحقيق الاتساق على مستوى الأجهزة وتوفير المزيد من الراحة للمستخدم، يضيف Android 11 عدة طرق تسهّل إدارة مجموعات ملفات الوسائط.
الوصول إلى الملفات باستخدام مسارات الملفات المباشرة والمكتبات المجمّعة من رموز برمجية أصلية
للمساعدة في جعل تطبيقك يعمل بسلاسة أكبر مع مكتبات وسائط خارجية، يتيح لك نظام التشغيل Android 11 استخدام واجهات برمجة تطبيقات أخرى غير MediaStore للوصول إلى ملفات الوسائط من وحدة التخزين المشتركة باستخدام مسارات الملفات المباشرة. وتشمل واجهات برمجة التطبيقات هذه ما يلي:
- واجهة برمجة التطبيقات
File - المكتبات المجمّعة من رموز برمجية أصلية، مثل
fopen()
الوصول إلى البيانات من تطبيقات أخرى
لحماية خصوصية المستخدم، يفرض النظام قيودًا إضافية على وصول تطبيقك إلى الأدلة الخاصة بالتطبيقات الأخرى على الأجهزة التي تعمل بنظام التشغيل Android 11 أو الإصدارات الأحدث.
الوصول إلى أدلة البيانات في مساحة التخزين الداخلية
بدأ نظام التشغيل Android 9 (مستوى واجهة برمجة التطبيقات 28) في فرض قيود على التطبيقات التي يمكنها إتاحة الملفات في أدلة البيانات على وحدة التخزين الداخلية للتطبيقات الأخرى. لا يمكن للتطبيقات التي تستهدف الإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث إتاحة الوصول إلى الملفات في أدلة البيانات الخاصة بها.
ويوسّع نظام التشغيل Android 11 نطاق هذا التقييد. إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android، لن يتمكّن من الوصول إلى الملفات في دليل بيانات أي تطبيق آخر، حتى إذا كان التطبيق الآخر يستهدف الإصدار 8.1 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 27) أو إصدارًا أقدم، وكان قد جعل الملفات في دليل بياناته قابلة للقراءة من قِبل الجميع.
الوصول إلى الأدلة الخاصة بالتطبيق على وحدة التخزين الخارجية
في الإصدار 11 من نظام التشغيل Android، لم يعد بإمكان التطبيقات الوصول إلى الملفات في الدليل المخصّص لكل تطبيق ضمن وحدة التخزين الخارجية لأي تطبيق آخر.
قيود الوصول إلى المستندات
لمنح المطوّرين وقتًا للاختبار، لن تسري التغييرات التالية المتعلّقة بإطار عمل الوصول إلى مساحة التخزين (SAF) إلا إذا كان تطبيقك يستهدف الإصدار Android 11 أو الإصدارات الأحدث.
الوصول إلى الأدلة
لم يعُد بإمكانك استخدام إجراء intent
ACTION_OPEN_DOCUMENT_TREE
لطلب الوصول إلى الأدلة التالية:
- الدليل الجذري لوحدة التخزين الداخلية
- الدليل الجذري لكل وحدة تخزين في بطاقة SD تعتبرها الشركة المصنّعة للجهاز موثوقة، بغض النظر عمّا إذا كانت البطاقة محاكاة أو قابلة للإزالة. وحدة التخزين الموثوقة هي التي يمكن للتطبيق الوصول إليها بنجاح في معظم الأوقات.
- دليل "
Download"
الوصول إلى الملفات
لم يعُد بإمكانك استخدام إجراء intent
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في إعدادات النظام. في صفحة الإعدادات > الخصوصية > إدارة الأذونات > الملفات والوسائط، يتم إدراج كل تطبيق لديه الإذن ضمن مسموح به لجميع الملفات. إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android، يُرجى العِلم أنّ إذن الوصول إلى "جميع الملفات" هو إذن بالقراءة فقط. للقراءة والكتابة في جميع الملفات في مساحة التخزين المشتركة باستخدام هذا التطبيق، يجب الحصول على إذن الوصول إلى جميع الملفات.
استهداف الإصدار 11 من نظام التشغيل Android
إذا كان تطبيقك يستهدف الإصدار 11 من نظام التشغيل Android، لن يوفّر إذن WRITE_EXTERNAL_STORAGE وإذن WRITE_MEDIA_STORAGE المميّز أي إمكانية وصول إضافية.
يُرجى العِلم أنّه على الأجهزة التي تعمل بالإصدار 10 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 29) أو الإصدارات الأحدث، يمكن لتطبيقك المساهمة في مجموعات وسائط محدّدة جيدًا، مثل MediaStore.Downloads، بدون طلب أي أذونات متعلقة بمساحة التخزين. يمكنك الاطّلاع على مزيد من المعلومات حول كيفية طلب الأذونات اللازمة فقط عند التعامل مع ملفات الوسائط في تطبيقك.
الوصول إلى كل الملفات
يمكن لمعظم التطبيقات التي تتطلّب الوصول إلى مساحة التخزين المشتركة اتّباع أفضل الممارسات المتعلّقة بمشاركة ملفات الوسائط ومشاركة الملفات غير المتعلّقة بالوسائط. ومع ذلك، فإنّ بعض التطبيقات لها حالة استخدام أساسية تتطلّب الوصول إلى الملفات على نطاق واسع على الجهاز، ولكن لا يمكنها إجراء ذلك بكفاءة باستخدام أفضل الممارسات المتعلّقة بمساحة التخزين التي تراعي الخصوصية. يوفّر Android إذن وصول خاصًا للتطبيقات يُسمى الوصول إلى كل الملفات لهذه الحالات. للمزيد من المعلومات، راجع الدليل حول كيفيةإدارة جميع الملفات على جهاز تخزين.
مراجع إضافية
لمزيد من المعلومات حول التغييرات في مساحة التخزين في Android 11، يُرجى الاطّلاع على المراجع التالية: