يعزّز نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) النظام الأساسي بشكل أكبر، ما يوفّر حماية أفضل لبيانات التطبيقات والمستخدمين على مساحة التخزين الخارجية. يتضمّن هذا الإصدار العديد من التحسينات، مثل إمكانية الوصول إلى مسار الملفات الأولية، وعمليات التعديل المجمّع للوسائط، وواجهة مستخدم معدَّلة لإطار عمل Storage Access Framework.
يتضمّن الإصدار أيضًا تحسينات على مساحة التخزين المحدودة النطاق، ما يسهّل على المطوّرين تنفيذ حالات استخدام مساحة التخزين بعد نقل البيانات إلى نموذج مساحة التخزين هذا.
فرض استخدام ميزة "التخزين المحصور"
يمكن للتطبيقات التي تعمل على الإصدار 11 من نظام التشغيل Android ولكنها تستهدف الإصدار 10 (المستوى 29 لواجهة برمجة التطبيقات) أن تطلب السمة requestLegacyExternalStorage. يسمح هذا الخيار للتطبيقات بالتوقف مؤقتًا عن استخدام
التغييرات المرتبطة
بالتخزين الفرعي، مثل منح إذن الوصول إلى أدلة مختلفة
وأنواع مختلفة من ملفات الوسائط. بعد تعديل تطبيقك ليصبح متوافقًا مع Android 11، سيتجاهل النظام العلامة requestLegacyExternalStorage.
الحفاظ على التوافق مع Android 10
إذا كان تطبيقك يوقف ميزة "التخزين الفرعي" عند تشغيله على أجهزة Android 10، ننصحك بمواصلة ضبط requestLegacyExternalStorage على true في ملف بيان تطبيقك. بهذه الطريقة، يمكن أن يستمر تطبيقك في العمل على النحو المتوقّع على الأجهزة التي تعمل بنظام التشغيل Android 10.
نقل البيانات إلى أدلة مرئية عند استخدام التخزين الفرعي
إذا كان تطبيقك يستخدم نموذج التخزين القديم وكان يستهدف الإصدار 10 من نظام التشغيل Android أو إصدارًا أقدم، قد يتم تخزين البيانات في دليل لا يمكن لتطبيقك الوصول إليه عند تفعيل نموذج التخزين الفرعي. قبل استهداف Android 11، عليك نقل البيانات إلى دليل متوافق مع ميزة "التخزين الفرعي".
اختبار التخزين الفرعي
لتفعيل ميزة "التخزين المحصور" في تطبيقك، بغض النظر عن إصدار حزمة تطوير البرامج (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 للوصول إلى ملفات الوسائط من وحدة التخزين المشتركة باستخدام مسارات الملفات المباشرة. تشمل واجهات برمجة التطبيقات هذه ما يلي:
- واجهة برمجة التطبيقات
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، يُرجى الاطّلاع على المواد التالية: