التخزين الخارجي أندرويد: ما هو، أنواع الوسائط وكيفية العمل في التطوير

المؤلف: IT Sectr نُشر: 2026-03-13 وقت القراءة: 11 دق

التخزين الخارجي على الأجهزة المحمولة هو وسيط بيانات قابل للإزالة يمكن لأي تطبيق الحصول عليه بالأذونات المناسبة. وفقًا لـ Android Open Source Project، 2026، بدءًا من أندرويد 10، قدمت Google Scoped Storage — وهو نموذج يقيّد الوصول المباشر إلى نظام الملفات ويتطلب استخدام MediaStore API للعمل مع ملفات الوسائط المشتركة. يعزز هذا النهج أمان بيانات المستخدم ويمنع تسرب المعلومات بين التطبيقات.

الخلاصة

  • External Storage — تخزين قابل للإزالة (بطاقة SD، USB-OTG) متاح للقراءة والكتابة من قبل تطبيقات مختلفة
  • Scoped Storage على أندرويد 10+ يقيّد الوصول المباشر إلى نظام الملفات ويستبدله بـ MediaStore API
  • iOS لا يدعم بطاقات SD — يتم الوصول إلى الملفات الخارجية عبر Document Picker
  • الأذونات READ_EXTERNAL_STORAGE و WRITE_EXTERNAL_STORAGE إلزامية لأندرويد 9 والإصدارات الأقدم
  • تنسيق بطاقة SD كتخزين داخلي أو محمول يحدد نموذج الوصول والتشفير

ما هو التخزين الخارجي على الأجهزة المحمولة؟

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

على أندرويد، يأتي التخزين الخارجي في وضعين رئيسيين: محمول وقابل للتبني. عند تنسيق بطاقة SD كتخزين محمول، تبقى قابلة للإزالة ويتم تنسيقها بـ FAT32 أو exFAT. في وضع التخزين القابل للتبني، يتم تنسيق البطاقة بـ ext4 وتشفيرها باستخدام AES-128، وبعد ذلك يعاملها النظام كامتداد للذاكرة الداخلية. الوضع القابل للتبني متاح منذ أندرويد 6.0 Marshmallow، ولكن غالبًا ما يقوم مصنعو الأجهزة بتعطيل هذه الميزة في برامجهم الثابتة. وفقًا لإحصائيات Google Play Console، حوالي 12% فقط من أجهزة أندرويد تدعم التخزين القابل للتبني، لذلك لا يُنصح بالاعتماد على توسيع الذاكرة الداخلية عبر بطاقة SD كخيار وحيد.

على iOS، لا توجد بطاقات SD تقليدية. تستخدم Apple بنية مغلقة حيث يعتمد كل التخزين على الذاكرة الداخلية و iCloud. يتم دعم محركات الأقراص الخارجية عبر منفذ Lightning أو USB-C، ولكن الوصول إليها مقيد بمدير الملفات Files والتطبيقات التي تتكامل مع Document Picker. يقرر المستخدم الملفات التي يريد فتحها من مصدر خارجي — لا يمكن للتطبيق فحص محرك أقراص متصل دون موافقة صريحة.

أنواع الوسائط الخارجية وخصائصها

يعتمد اختيار الوسيط الخارجي على متطلبات السرعة والسعة وقابلية النقل. الأنواع المختلفة من الوسائط لها خصائص سرعة مختلفة وأنظمة ملفات وحالات استخدام في تطبيقات الجوال.

نوع الوسيطالسعة القصوىسرعة القراءةنظام الملفات
SD UHS-I2 تيرابايتحتى 104 ميجابايت/ثexFAT / FAT32
SD UHS-II2 تيرابايتحتى 312 ميجابايت/ثexFAT / FAT32
USB 3.0 OTG2 تيرابايتحتى 400 ميجابايت/ثexFAT / NTFS / FAT32
USB-C SSD4 تيرابايتحتى 1000 ميجابايت/ثexFAT / APFS / NTFS

بطاقات SD وفئات السرعة

تُصنف بطاقات SD حسب سرعة الكتابة: Class 10 (10 ميجابايت/ث)، U1 (10 ميجابايت/ث)، U3 (30 ميجابايت/ث)، V30 (30 ميجابايت/ث) و V90 (90 ميجابايت/ث). يتطلب تسجيل فيديو 4K بطاقة من فئة U3 أو V30 على الأقل. لتطبيقات الجوال التي تعمل مع ملفات وسائط كبيرة (معالجة الصور، تحرير الفيديو)، يُوصى باستخدام بطاقات من فئة U3 وما فوق. تؤثر سرعة البطاقة مباشرة على أداء التطبيق: تسجيل فيديو 4K على بطاقة Class 10 قد يسبب فقدان الإطارات بسبب عدم كفاية عرض النطاق الترددي. عند اختيار بطاقة SD لتطبيق ما، انتبه ليس فقط إلى فئة السرعة ولكن أيضًا إلى تصنيف فئة أداء التطبيق: A1 و A2 يشيران إلى الحد الأدنى من أداء القراءة والكتابة العشوائية الحرج لعمليات قاعدة البيانات وذاكرة التخزين المؤقت للتطبيق.

محركات أقراص USB-OTG

USB-OTG (On-The-Go) يسمح بتوصيل محركات أقراص USB خارجية بجهاز محمول عبر محول. يدعم أندرويد OTG منذ الإصدار 3.1، ولكن تركيب محرك الأقراص يتطلب نواة مع دعم نظام الملفات. FAT32 و exFAT مدعومان بشكل افتراضي، NTFS — فقط على الأجهزة ذات النواة المخصصة أو عبر مكتبة Paragon. على iOS، ظهر دعم محركات أقراص USB في iOS 13 مع تطبيق Files. للعمل مع محرك أقراص، يجب على التطبيق استخدام UIDocumentPickerViewController، الذي يوفر الوصول فقط إلى الملفات التي يختارها المستخدم — لا يمنح iOS وصولاً كاملاً إلى نظام ملفات محرك الأقراص.

التخزين السحابي كامتداد

خدمات السحابة — iCloud، Google Drive، Dropbox — يمكن أن تتكامل مع نظام ملفات الجهاز عبر موفري النظام. على iOS، iCloud Drive جزء من حاوية Sandbox للتطبيق ويتم مزامنة الملفات تلقائيًا بين أجهزة المستخدم. على أندرويد، يوفر Google Drive API لقراءة وكتابة الملفات، ولكن لا يحدث تركيب مباشر في نظام الملفات. لتطبيقات الجوال التي تعمل بكميات كبيرة من البيانات، يمكن أن يكون التخزين السحابي بديلاً لبطاقة SD، خاصة على الأجهزة بدون فتحة توسعة.

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

العمل مع التخزين الخارجي على أندرويد يعتمد على إصدار نظام التشغيل ونموذج Scoped Storage. تختلف عملية الوصول إلى الملفات لأندرويد 9 والإصدارات الأقدم، أندرويد 10–12 وأندرويد 13+.

الوصول عبر MediaStore API

بدءًا من أندرويد 10، الطريقة الأساسية للوصول إلى ملفات الوسائط المشتركة هي MediaStore API. توفر هذه الواجهة واجهة موحدة لقراءة وكتابة الصور ومقاطع الفيديو والملفات الصوتية في التخزين المشترك. لا يتطلب التطبيق إذن READ_EXTERNAL_STORAGE للوصول إلى ملفاته الخاصة، ولكن قراءة ملفات التطبيقات الأخرى لا تزال تتطلب إذنًا صريحًا من المستخدم. يقوم MediaStore تلقائيًا بفهرسة ملفات الوسائط ويوفر ContentResolver للاستعلام عنها.

kotlin
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}

val projection = arrayOf(
    MediaStore.Images.Media._ID,
    MediaStore.Images.Media.DISPLAY_NAME
)

val cursor = contentResolver.query(collection, projection, null, null, null)

بعد تنفيذ الاستعلام، تحصل على Cursor يحتوي على URIs للملفات. لقراءة ملف، افتح InputStream عبر contentResolver.openInputStream(uri). تتم الكتابة بالمثل عبر contentResolver.openOutputStream(uri). يتعامل MediaStore تلقائيًا مع تعارضات الأسماء ويوفر إمكانية إدراج ملفات جديدة عبر contentResolver.insert(uri, values)، والذي يعيد URI للملف الذي تم إنشاؤه.

العمل مع الملفات العشوائية عبر SAF

Storage Access Framework (SAF) هي الطريقة الموصى بها للوصول إلى الملفات العشوائية على أندرويد 10+. يوفر SAF حوار اختيار ملفات النظام الذي من خلاله يمنح المستخدم للتطبيق الوصول إلى ملف أو دليل محدد. يحصل التطبيق على URI وصول يظل صالحًا حتى إعادة تشغيل الجهاز أو حتى إلغاء الإذن صراحةً في الإعدادات. لا يتطلب SAF أذونات READ_EXTERNAL_STORAGE أو WRITE_EXTERNAL_STORAGE، مما يبسط النشر على Google Play ويقلل عدد طلبات الأذونات.

kotlin
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
    Intent.FLAG_GRANT_READ_URI_PERMISSION
        or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)

كيفية العمل مع التخزين الخارجي على iOS

على iOS، العمل مع الملفات الخارجية مبني حول UIDocumentPickerViewController، الذي يفتحه المستخدم لاختيار ملفات أو أدلة محددة. لا يتمتع التطبيق بإمكانية الوصول المباشر إلى نظام ملفات محرك الأقراص الخارجي — فقط إلى الملفات التي اختارها المستخدم صراحةً. بعد اختيار الملف، يحصل التطبيق على عنوان URL مؤقت في حاوية Sandbox ويمكنه العمل مع الملف عبر FileManager.

استخدام UIDocumentPickerViewController

UIDocumentPickerViewController يسمح للمستخدم باختيار ملف واحد أو أكثر من أي مصدر متاح: iCloud Drive، محرك أقراص USB متصل، أو خدمة سحابية تابعة لجهة خارجية. بعد الاختيار، يعيد وحدة التحكم مصفوفة من عناوين URL التي يمكن للتطبيق قراءتها خلال الجلسة. للحفاظ على الوصول بعد إغلاق التطبيق، يجب استدعاء startAccessingSecurityScopedResource() وحفظ إشارة مرجعية محدودة النطاق الأمني في UserDefaults.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.data, .image],
    asCopy: true
)
picker.delegate = self

func documentPicker(
    controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    let data = try Data(contentsOf: url)
}

المعامل asCopy: true يعني أن iOS سينسخ الملف إلى حاوية Sandbox للتطبيق، وسيحصل التطبيق على نسخته الخاصة المستقلة عن الملف الأصلي. إذا تم تحديد asCopy: false، يحصل التطبيق على مرجع للملف الأصلي، ولكن للوصول إليه يجب استدعاء url.startAccessingSecurityScopedResource(). بدون هذا الاستدعاء، سيؤدي قراءة الملف إلى استثناء. بعد الانتهاء من العمل مع الملف، تأكد دائمًا من استدعاء url.stopAccessingSecurityScopedResource() لتحرير الموارد ومنع تسرب الواصفات.

قيود وأمان التخزين الخارجي

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

على أندرويد 10+، Scoped Storage يحد بشكل كبير من قدرة التطبيقات على الوصول إلى نظام الملفات المشترك. يمكن للتطبيق قراءة الملفات التي أنشأها بنفسه فقط دون إذن، ويتطلب الوصول إلى ملفات التطبيقات الأخرى موافقة صريحة من المستخدم عبر حوار SAF. ومع ذلك، لا ينطبق هذا القيد على التطبيقات ذات إصدار SDK الهدف أقل من 29 — فهي تستمر في العمل وفق النموذج القديم، مما يشكل خطرًا على المستخدمين الذين لم يحدّثوا تطبيقاتهم. يتطلب Google Play targetSdkVersion 29+ لجميع التطبيقات الجديدة والمحدثة منذ عام 2021.

التنسيق والتشفير هما جانب آخر مهم من الأمان. بطاقة SD المنسقة كتخزين محمول غير مشفرة من قبل النظام افتراضيًا. حتى عند استخدام التخزين القابل للتبني، يتم تنشيط التشفير فقط إذا قام مصنع الجهاز بتمكين هذه الميزة في البرنامج الثابت. لحماية البيانات الحساسة المحفوظة على التخزين الخارجي، استخدم مكتبة EncryptedFile من AndroidX Security، التي تشفر كل ملف على حدة باستخدام AES256-GCM، بغض النظر عن تشفير النظام.

توصيات لاستخدام التخزين الخارجي

الاستخدام الفعال للتخزين الخارجي يتطلب توازنًا بين توفر البيانات والأمان. اتبع هذه القواعد لضمان تخزين موثوق لملفات المستخدم.

  • لا تخزن البيانات الحساسة في التخزين الخارجي بدون تشفير. استخدم EncryptedFile أو EncryptedSharedPreferences لحماية الرموز وكلمات المرور والبيانات الشخصية
  • تحقق من توفر التخزين الخارجي قبل الكتابة: استخدم Environment.getExternalStorageState() للتحقق من حالة بطاقة SD. قد تكون البطاقة منزوعة أو تالفة أو غير متاحة للكتابة
  • استخدم Scoped Storage على أندرويد 10+ و SAF للوصول إلى الملفات المشتركة. يقلل هذا من عدد الأذونات المطلوبة ويحسن تجربة المستخدم
  • تعامل دائمًا مع الاستثناءات عند العمل مع التخزين الخارجي. قد يتم حذف ملف بواسطة تطبيق آخر أو نقله أثناء القراءة، مما يؤدي إلى FileNotFoundException
  • حذر المستخدم قبل كتابة كميات كبيرة من البيانات على التخزين الخارجي. أظهر حوار تأكيد واتركه يختار دليلاً عبر SAF

من المهم تذكر أن التخزين الخارجي لا يضمن سلامة البيانات أثناء الأعطال. بطاقات SD لها عدد محدود من دورات إعادة الكتابة، خاصة الموديلات الاقتصادية من الفئة Class 4 و Class 6. مع الكتابة المكثفة (على سبيل المثال، التسجيل أو التخزين المؤقت لبيانات البث)، قد تتعطل البطاقة في غضون بضعة أشهر. لمثل هذه السيناريوهات، استخدم الذاكرة الداخلية أو التخزين السحابي، واحفظ فقط الملفات في التخزين الخارجي التي يعتبر المستخدم فقدانها مقبولاً. تحقق بانتظام من حالة بطاقة SD عبر StatFs وأبلغ المستخدم عن أخطاء نظام الملفات الحرجة.

الأسئلة الشائعة

هل إذن الوصول إلى التخزين الخارجي مطلوب على أندرويد 13؟

على أندرويد 13+، تم استبدال إذن READ_EXTERNAL_STORAGE بأذونات أكثر تفصيلاً: READ_MEDIA_IMAGES، READ_MEDIA_VIDEO و READ_MEDIA_AUDIO. لأنواع الملفات الأخرى، استخدم SAF.

هل يمكن تنسيق بطاقة SD كذاكرة داخلية؟

نعم، ميزة adoptable storage متاحة على أندرويد 6.0+. يتم تنسيق البطاقة بـ ext4 مع تشفير AES-128. ومع ذلك، يقوم العديد من المصنعين بتعطيل هذا الخيار، وحوالي 88% من الأجهزة لا تدعم التخزين القابل للتبني.

كيف أتحقق مما إذا كانت بطاقة SD مثبتة في الجهاز؟

استخدم طريقة Environment.getExternalStorageState() التي تعيد سلسلة حالة. القيمة MEDIA_MOUNTED تعني أن البطاقة متاحة للقراءة والكتابة. القيم الأخرى تشير إلى أخطاء أو عدم وجود بطاقة.

ما الفرق بين Scoped Storage والوصول الكامل لنظام الملفات؟

Scoped Storage يقيّد التطبيق بحاويته الخاصة ومكتبات الوسائط المشتركة MediaStore. الوصول الكامل يسمح بقراءة أي ملفات على الجهاز. يعزز Scoped Storage أمان بيانات المستخدم وهو إلزامي للتطبيقات الجديدة.

كيف أحصل على URI للوصول إلى ملف على بطاقة SD عبر SAF؟

قم بتشغيل Intent بالإجراء ACTION_OPEN_DOCUMENT_TREE، الذي سيفتح حوار اختيار الدليل. بعد الاختيار، تحصل على إذن URI صالح حتى إعادة التشغيل. احفظ هذا URI في SharedPreferences للاستخدام لاحقًا.

الملخص

  • External Storage — تخزين قابل للإزالة (بطاقة SD، USB-OTG) متاح لجميع التطبيقات بالأذونات المناسبة
  • Scoped Storage على أندرويد 10+ يقيّد الوصول المباشر إلى نظام الملفات ويقدم MediaStore API لملفات الوسائط
  • iOS لا يدعم بطاقات SD — الوصول إلى الملفات الخارجية متاح فقط عبر UIDocumentPickerViewController
  • بطاقات SD مقسمة إلى فئات سرعة: Class 10، U1، U3، V30، V90 — مطلوب U3 كحد أدنى لتسجيل فيديو 4K
  • أمان التخزين الخارجي أقل من التخزين الداخلي — قم بتشفير البيانات الحساسة قبل الكتابة
  • التخزين القابل للتبني يسمح باستخدام بطاقة SD كامتداد للذاكرة الداخلية، لكنه مدعوم فقط على 12% من الأجهزة
  • يُوصى باستخدام SAF للوصول إلى الملفات العشوائية وعدم تخزين البيانات الحرجة بدون تشفير

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا