إدارة كل الملفات على جهاز تخزين

يمكن لمعظم التطبيقات التي تتطلّب الوصول إلى مساحة التخزين المشتركة اتّباع أفضل الممارسات المتعلّقة بمشاركة ملفات الوسائط ومشاركة الملفات غير المتعلّقة بالوسائط. ومع ذلك، تتضمّن بعض التطبيقات حالة استخدام أساسية تتطلّب الوصول الواسع النطاق إلى الملفات على الجهاز، ولكن لا يمكنها الوصول إليها بكفاءة باستخدام أفضل الممارسات التي تراعي الخصوصية في مساحة التخزين. يوفّر Android إذن وصول خاصًا للتطبيقات يُسمى الوصول إلى كل الملفات لهذه الحالات.

على سبيل المثال، قد تتطلّب حالة الاستخدام الأساسية لتطبيق مكافحة الفيروسات إجراء فحص منتظم للعديد من الملفات في أدلة مختلفة. إذا كانت عملية الفحص هذه تتطلّب تفاعلات متكررة من المستخدم لاختيار الأدلة باستخدام أداة اختيار الملفات في النظام، فإنّها توفّر تجربة سيئة للمستخدم. تتطلّب حالات الاستخدام الأخرى، مثل تطبيقات إدارة الملفات وتطبيقات الاحتفاظ بنسخة احتياطية والاستعادة وتطبيقات إدارة المستندات، مراعاة اعتبارات مماثلة.

طلب إذن الوصول إلى كل الملفات

يمكن للتطبيق طلب إذن الوصول إلى كل الملفات من المستخدم من خلال اتّباع الخطوات التالية:

  1. يجب تضمين إذن MANAGE_EXTERNAL_STORAGE في نموذج البيان.
  2. استخدِم إجراء intent‏ 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.

استدعاء نشاط إدارة مساحة التخزين لتطبيق آخر

في الإصدار 12 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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" تحذير lint الذي يظهر في الشكل 1. يُذكّرك هذا التحذير بأنّ "متجر Google Play" لديه سياسة تحدّ من استخدام الإذن.

الشكل 1: تحذير Lint في "استوديو Android" لتذكير المطوّرين بسياسة Google Play بشأن إذن MANAGE_EXTERNAL_STORAGE.

يجب طلب إذن MANAGE_EXTERNAL_STORAGE فقط عندما يتعذّر على تطبيقك الاستفادة بفعالية من واجهات برمجة التطبيقات التي تراعي الخصوصية أكثر، مثل إطار عمل الوصول إلى مساحة التخزين أو واجهة Media Store API. يجب أن يندرج استخدام تطبيقك للإذن ضمن الاستخدامات المسموح بها وأن يكون مرتبطًا مباشرةً بالوظيفة الأساسية له. إذا كان تطبيقك يتضمّن حالة استخدام مشابهة لأي مما يلي، فمن المرجّح أن يطلب إذن MANAGE_EXTERNAL_STORAGE:

  • تطبيقات إدارة الملفات
  • تطبيقات الاحتفاظ بنسخة احتياطية من الملفات واستعادتها
  • تطبيقات مكافحة الفيروسات
  • تطبيقات إدارة المستندات
  • البحث في الملفات على الجهاز فقط
  • تشفير القرص والملفات
  • نقل البيانات من جهاز إلى آخر