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