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

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

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

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

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

  1. حدِّد الإذن MANAGE_EXTERNAL_STORAGE في البيان.
  2. استخدِم رمز 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:

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