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