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

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

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

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

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