يمكن لمعظم التطبيقات التي تتطلّب الوصول إلى مساحة التخزين المشتركة اتّباع أفضل الممارسات المتعلّقة بمشاركة ملفات الوسائط ومشاركة الملفات غير المرتبطة بالوسائط. ومع ذلك، تتطلّب بعض التطبيقات حالة استخدام أساسية تتيح الوصول إلى مجموعة كبيرة من الملفات على الجهاز، ولكن لا يمكنها الوصول إليها بكفاءة باستخدام أفضل الممارسات التي تراعي الخصوصية في ما يتعلق بمساحة التخزين. يوفّر نظام التشغيل Android إذن وصول خاص للتطبيقات يُسمى الوصول إلى جميع الملفات لهذه الحالات.
على سبيل المثال، قد تتطلّب حالة الاستخدام الأساسية لتطبيق مكافحة الفيروسات إجراء عمليات فحص منتظمة للعديد من الملفات في مختلف الدلائل. إذا كان هذا الفحص يتطلّب تفاعلات متكرّرة من المستخدم لاختيار الدلائل باستخدام أداة اختيار الملفات في النظام، سيؤدي ذلك إلى تجربة سيئة للمستخدم. تتطلّب حالات الاستخدام الأخرى، مثل تطبيقات إدارة الملفات وتطبيقات الاحتفاظ بنسخة احتياطية والاستعادة وتطبيقات إدارة المستندات، اعتبارات مماثلة.
طلب إذن الوصول إلى كل الملفات
يمكن للتطبيق طلب إذن الوصول إلى جميع الملفات من المستخدم من خلال تنفيذ ما يلي:
- عليك تعريف إذن
MANAGE_EXTERNAL_STORAGE
في بيان التطبيق. - استخدِم إجراء النية
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
لتوجيه المستخدمين إلى صفحة إعدادات النظام حيث يمكنهم تفعيل الخيار التالي لتطبيقك: السماح بالوصول إلى جميع الملفات.
لتحديد ما إذا تم منح تطبيقك إذن MANAGE_EXTERNAL_STORAGE
، استدعِ الدالة Environment.isExternalStorageManager()
.
العمليات المسموح بها من خلال إذن MANAGE_EXTERNAL_STORAGE
يمنح إذن MANAGE_EXTERNAL_STORAGE
ما يلي:
الإذن بالقراءة والكتابة لجميع الملفات ضمن وحدة التخزين المشتركة
الوصول إلى محتويات الجدول
MediaStore.Files
إذن الوصول إلى الدليل الجذر لكل من محرك أقراص USB أثناء التنقل (OTG) وبطاقة SD
إذن الكتابة في جميع أدلة التخزين الداخلي باستثناء
/Android/data/
و/sdcard/Android
ومعظم الأدلة الفرعية ضمن/sdcard/Android
تتضمّن إذن الكتابة هذا إمكانية الوصول إلى مسار الملف المباشر.ومع ذلك، لا يمكن للتطبيقات التي تم منحها هذا الإذن الوصول إلى الأدلة الخاصة بالتطبيقات التي تخص تطبيقات أخرى، لأنّ هذه الأدلة تظهر كأدلة فرعية من
Android/data/
على وحدة تخزين.
عندما يملك التطبيق إذن MANAGE_EXTERNAL_STORAGE
، يمكنه الوصول إلى هذه الملفات والأدلة الإضافية باستخدام واجهة برمجة التطبيقات MediaStore
أو مسارات الملفات المباشرة. عند استخدام إطار عمل الوصول إلى مساحة التخزين، لا يمكنك الوصول إلى ملف أو دليل إلا إذا كان بإمكانك إجراء ذلك بدون الحصول على إذن MANAGE_EXTERNAL_STORAGE
.
استدعاء نشاط إدارة مساحة التخزين لتطبيق آخر
في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للتطبيقات التي لديها الإذن
MANAGE_EXTERNAL_STORAGE
والإذن
QUERY_ALL_PACKAGES
، مثل تطبيقات إدارة الملفات، استخدام
getManageSpaceActivityIntent()
لإرسال المستخدمين إلى نشاط إدارة المساحة المخصّصة
في تطبيق آخر.
تتلقّى الطريقة getManageSpaceActivityIntent()
اسم حزمة ورمز طلب، وتعرض أحد القيم التالية:
PendingIntent
، إذا كان التطبيق الذي يحمل اسم الحزمة المحدّد قد حدّد نشاطًا مخصّصًا "لإدارة المساحة" يمكن لتطبيق إدارة الملفات الذي استدعى طريقةgetManageSpaceActivityIntent()
بعد ذلك استدعاء الهدف الذي تم إرجاعه لإرسال المستخدمين إلى النشاط المخصّص.-
null
، إذا لم يحدّد التطبيق الذي يحمل اسم الحزمة المحدّد نشاط "إدارة المساحة".
تفعيل إذن MANAGE_EXTERNAL_STORAGE للاختبار
للتعرّف على تأثير إذن MANAGE_EXTERNAL_STORAGE
في تطبيقك، يمكنك تفعيل الإذن للاختبار. لإجراء ذلك، نفِّذ الأمر التالي على الجهاز المتصل بجهاز الاختبار:
adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow
إشعار Google Play
يقدّم هذا القسم إشعارًا للمطوّرين الذين ينشرون تطبيقات على Google Play.
للحدّ من الوصول الواسع النطاق إلى مساحة التخزين المشتركة، عدّل متجر Google Play
سياسته
لتقييم التطبيقات التي تستهدف الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث وتطلب
الوصول إلى جميع الملفات من خلال إذن MANAGE_EXTERNAL_STORAGE
. تسري هذه السياسة اعتبارًا من مايو 2021.
عندما يستهدف تطبيقك الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث ويقدّم بيانًا عن الإذن MANAGE_EXTERNAL_STORAGE
، يعرض Android Studio تحذيرًا من أداة lint يظهر في الشكل 1. يذكّرك هذا التحذير بأنّ "متجر Google Play" لديه سياسة تحدّ من استخدام الإذن.
MANAGE_EXTERNAL_STORAGE
.
لا تطلب الإذن MANAGE_EXTERNAL_STORAGE
إلا إذا تعذّر على تطبيقك الاستفادة بفعالية من واجهات برمجة التطبيقات التي تراعي الخصوصية أكثر، مثل إطار عمل الوصول إلى مساحة التخزين أو واجهة MediaStore API. يجب أن يندرج استخدام تطبيقك للإذن ضمن الاستخدامات المسموح بها وأن يكون مرتبطًا مباشرةً بالوظيفة الأساسية للتطبيق. إذا كان تطبيقك يتضمّن حالة استخدام مشابهة لأي مما يلي، من المحتمل أن يتمكّن من طلب الإذن MANAGE_EXTERNAL_STORAGE
:
- تطبيقات إدارة الملفات
- تطبيقات الاحتفاظ بنسخة احتياطية من الملفات واستعادتها
- تطبيقات مكافحة الفيروسات
- تطبيقات إدارة المستندات
- البحث عن الملفات على الجهاز
- تشفير القرص والملفات
- نقل البيانات من جهاز إلى آخر