موبائل آلات پر بیرونی اسٹوریج ایک ہٹانے کے قابل ڈیٹا میڈیم ہے جس تک مناسب اجازتوں والی کوئی بھی ایپلیکیشن رسائی حاصل کر سکتی ہے۔ Android Open Source Project، 2026 کے مطابق، Android 10 سے شروع کرتے ہوئے، Google نے Scoped Storage متعارف کرایا — ایک ماڈل جو فائل سسٹم تک براہ راست رسائی کو محدود کرتا ہے اور مشترکہ میڈیا فائلوں کے ساتھ کام کرنے کے لیے MediaStore API کے استعمال کی ضرورت ہے۔ یہ نقطہ نظر صارف کے ڈیٹا کی حفاظت کو بڑھاتا ہے اور ایپلیکیشنز کے درمیان معلومات کے رساو کو روکتا ہے۔
اہم نکات
READ_EXTERNAL_STORAGE اور WRITE_EXTERNAL_STORAGE Android 9 اور اس سے نیچے کے لیے لازمی ہیںبیرونی اسٹوریج ایک میموری کا علاقہ ہے جو ایپلیکیشن کے محفوظ سینڈ باکس کا حصہ نہیں ہے اور دوسرے پروگراموں کے لیے قابل رسائی ہے۔ Android پر، یہ اصطلاح عام طور پر SD کارڈ سے مراد ہے، لیکن بیرونی اسٹوریج میں OTG اڈاپٹر کے ذریعے منسلک USB ڈرائیوز اور فائل سسٹم کی سطح پر مربوط کلاؤڈ ڈرائیوز بھی شامل ہیں۔ داخلی اسٹوریج سے بنیادی فرق علیحدگی کی کمی ہے: مناسب اجازتوں والی کوئی بھی ایپلیکیشن بیرونی اسٹوریج میں فائلوں کو پڑھ اور تبدیل کر سکتی ہے۔
Android پر، بیرونی اسٹوریج دو اہم موڈز میں آتا ہے: پورٹیبل اور قابل قبول (adoptable)۔ جب SD کارڈ کو پورٹیبل اسٹوریج کے طور پر فارمیٹ کیا جاتا ہے، تو یہ ہٹانے کے قابل رہتا ہے اور FAT32 یا exFAT میں فارمیٹ ہوتا ہے۔ قابل قبول اسٹوریج موڈ میں، کارڈ ext4 میں فارمیٹ ہوتا ہے اور AES-128 کا استعمال کرتے ہوئے خفیہ کیا جاتا ہے، جس کے بعد سسٹم اسے داخلی میموری کی توسیع کے طور پر سمجھتا ہے۔ قابل قبول موڈ Android 6.0 Marshmallow سے دستیاب ہے، لیکن آلہ ساز اکثر اپنے فرم ویئر میں اس خصوصیت کو غیر فعال کر دیتے ہیں۔ Google Play Console کے اعدادوشمار کے مطابق، صرف تقریباً 12% Android آلات قابل قبول اسٹوریج کو سپورٹ کرتے ہیں، لہٰذا واحد آپشن کے طور پر SD کارڈ کے ذریعے داخلی میموری کی توسیع پر انحصار کرنے کی سفارش نہیں کی جاتی ہے۔
iOS پر، روایتی SD کارڈز دستیاب نہیں ہیں۔ Apple ایک بند آرکیٹیکچر استعمال کرتا ہے جہاں تمام اسٹوریج داخلی فلیش میموری اور iCloud پر بنایا گیا ہے۔ بیرونی ڈرائیوز Lightning یا USB-C پورٹ کے ذریعے تعاون یافتہ ہیں، لیکن ان تک رسائی سسٹم فائل مینیجر Files اور ان ایپلیکیشنز تک محدود ہے جو Document Picker کے ساتھ مربوط ہوتی ہیں۔ صارف فیصلہ کرتا ہے کہ بیرونی ماخذ سے کون سی فائلیں کھولنی ہیں — ایپلیکیشن واضح اجازت کے بغیر منسلک ڈرائیو کو اسکین نہیں کر سکتی۔
بیرونی میڈیا کا انتخاب رفتار، گنجائش اور پورٹیبلٹی کی ضروریات پر منحصر ہے۔ مختلف اقسام کے میڈیا میں موبائل ایپلیکیشنز میں مختلف رفتار کی خصوصیات، فائل سسٹم اور استعمال کے کیسز ہوتے ہیں۔
| میڈیا کی قسم | زیادہ سے زیادہ گنجائش | پڑھنے کی رفتار | فائل سسٹم |
|---|---|---|---|
| SD UHS-I | 2 TB | 104 MB/s تک | exFAT / FAT32 |
| SD UHS-II | 2 TB | 312 MB/s تک | exFAT / FAT32 |
| USB 3.0 OTG | 2 TB | 400 MB/s تک | exFAT / NTFS / FAT32 |
| USB-C SSD | 4 TB | 1000 MB/s تک | exFAT / APFS / NTFS |
SD کارڈز تحریری رفتار کے مطابق درجہ بندی کیے جاتے ہیں: Class 10 (10 MB/s)، U1 (10 MB/s)، U3 (30 MB/s)، V30 (30 MB/s) اور V90 (90 MB/s)۔ 4K ویڈیو ریکارڈنگ کے لیے کم از کم U3 یا V30 کارڈ کی ضرورت ہوتی ہے۔ بڑی میڈیا فائلوں (فوٹو پروسیسنگ، ویڈیو ایڈیٹنگ) کے ساتھ کام کرنے والی موبائل ایپلیکیشنز کے لیے، U3 کلاس اور اس سے اوپر کے کارڈز استعمال کرنے کی سفارش کی جاتی ہے۔ کارڈ کی رفتار براہ راست ایپلیکیشن کی کارکردگی کو متاثر کرتی ہے: Class 10 کارڈ پر 4K ویڈیو ریکارڈ کرنا ناکافی بینڈوتھ کی وجہ سے فریم ڈراپ کا سبب بن سکتا ہے۔ کسی ایپلیکیشن کے لیے SD کارڈ کا انتخاب کرتے وقت، نہ صرف رفتار کی کلاس بلکہ ایپلیکیشن پرفارمنس کلاس کی درجہ بندی پر بھی توجہ دیں: A1 اور A2 ڈیٹا بیس اور ایپلیکیشن کیشے آپریشنز کے لیے اہم کم از کم بے ترتیب پڑھنے اور لکھنے کی کارکردگی کی نشاندہی کرتے ہیں۔
USB-OTG (On-The-Go) ایک اڈاپٹر کے ذریعے موبائل آلہ سے بیرونی USB ڈرائیوز منسلک کرنے کی اجازت دیتا ہے۔ Android ورژن 3.1 سے OTG کو سپورٹ کرتا ہے، لیکن ڈرائیو کو ماؤنٹ کرنے کے لیے فائل سسٹم سپورٹ والے کرنل کی ضرورت ہوتی ہے۔ FAT32 اور exFAT ڈیفالٹ طور پر سپورٹ ہیں، NTFS — صرف حسب ضرور کرنل والے آلات پر یا Paragon لائبریری کے ذریعے۔ iOS پر، USB ڈرائیو سپورٹ iOS 13 میں Files ایپ کے ساتھ ظاہر ہوئی۔ ڈرائیو کے ساتھ کام کرنے کے لیے، ایپلیکیشن کو UIDocumentPickerViewController استعمال کرنا چاہیے، جو صارف کے منتخب کردہ فائلوں تک ہی رسائی فراہم کرتا ہے — iOS ڈرائیو کے فائل سسٹم تک مکمل رسائی نہیں دیتا۔
کلاؤڈ سروسز — iCloud، Google Drive، Dropbox — سسٹم فراہم کنندگان کے ذریعے آلہ کے فائل سسٹم میں مربوط ہو سکتی ہیں۔ iOS پر، iCloud Drive ایپلیکیشن کے Sandbox کنٹینر کا حصہ ہے اور فائلیں صارف کے آلات کے درمیان خود بخود مطابقت پذیر ہوتی ہیں۔ Android پر، Google Drive فائلوں کو پڑھنے اور لکھنے کے لیے API فراہم کرتا ہے، لیکن فائل سسٹم میں براہ راست ماؤنٹنگ نہیں ہوتی۔ بڑی مقدار میں ڈیٹا کے ساتھ کام کرنے والی موبائل ایپلیکیشنز کے لیے، کلاؤڈ اسٹوریج SD کارڈ کے متبادل کے طور پر کام کر سکتا ہے، خاص طور پر توسیعی سلاٹ کے بغیر آلات پر۔
Android پر بیرونی اسٹوریج کے ساتھ کام کرنا آپریٹنگ سسٹم کے ورژن اور Scoped Storage ماڈل پر منحصر ہے۔ فائل تک رسائی کا عمل Android 9 اور اس سے نیچے، Android 10–12 اور Android 13+ کے لیے مختلف ہے۔
Android 10 سے شروع کرتے ہوئے، مشترکہ میڈیا فائلوں تک رسائی کا بنیادی طریقہ MediaStore API ہے۔ یہ API مشترکہ اسٹوریج میں تصاویر، ویڈیوز اور آڈیو فائلوں کو پڑھنے اور لکھنے کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔ ایپلیکیشن کو اپنی فائلوں تک رسائی کے لیے READ_EXTERNAL_STORAGE اجازت کی ضرورت نہیں ہے، لیکن دوسری ایپلیکیشنز کی فائلیں پڑھنے کے لیے اب بھی واضح صارف کی اجازت درکار ہے۔ MediaStore خود بخود میڈیا فائلوں کو انڈیکس کرتا ہے اور انہیں دریافت کرنے کے لیے ContentResolver فراہم کرتا ہے۔
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)
استفسار پر عمل درآمد کے بعد، آپ کو فائلوں کے URIs پر مشتمل ایک Cursor ملتا ہے۔ فائل پڑھنے کے لیے، contentResolver.openInputStream(uri) کے ذریعے InputStream کھولیں۔ تحریر اسی طرح contentResolver.openOutputStream(uri) کے ذریعے کی جاتی ہے۔ MediaStore خود بخود نام کے تنازعات کو سنبھالتا ہے اور contentResolver.insert(uri, values) کے ذریعے نئی فائلیں داخل کرنے کی صلاحیت فراہم کرتا ہے، جو بنائی گئی فائل کا URI لوٹاتا ہے۔
Storage Access Framework (SAF) Android 10+ پر صوابدیدی فائلوں تک رسائی حاصل کرنے کا تجویز کردہ طریقہ ہے۔ SAF ایک سسٹم فائل سلیکٹر ڈائیلاگ فراہم کرتا ہے جس کے ذریعے صارف ایپلیکیشن کو کسی مخصوص فائل یا ڈائریکٹری تک رسائی دیتا ہے۔ ایپلیکیشن کو ایک رسائی URI ملتا ہے جو آلہ کے ریبوٹ ہونے تک یا سیٹنگز میں اجازت واضح طور پر منسوخ ہونے تک درست رہتا ہے۔ SAF کو READ_EXTERNAL_STORAGE یا WRITE_EXTERNAL_STORAGE اجازتوں کی ضرورت نہیں ہے، جو Google Play پر اشاعت کو آسان بناتا ہے اور اجازت کی درخواستوں کی تعداد کم کرتا ہے۔
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 پر، بیرونی فائلوں کے ساتھ کام UIDocumentPickerViewController کے گرد بنایا گیا ہے، جسے صارف مخصوص فائلوں یا ڈائریکٹریوں کو منتخب کرنے کے لیے کھولتا ہے۔ ایپلیکیشن کے پاس بیرونی ڈرائیو کے فائل سسٹم تک براہ راست رسائی نہیں ہے — صرف ان فائلوں تک جنہیں صارف نے واضح طور پر منتخب کیا ہے۔ فائل کے انتخاب کے بعد، ایپلیکیشن Sandbox کنٹینر میں ایک عارضی URL حاصل کرتی ہے اور FileManager کے ذریعے فائل کے ساتھ کام کر سکتی ہے۔
UIDocumentPickerViewController صارف کو کسی بھی دستیاب ماخذ سے ایک یا زیادہ فائلیں منتخب کرنے کی اجازت دیتا ہے: iCloud Drive، منسلک USB ڈرائیو، یا تیسرے فریق کی کلاؤڈ سروس۔ انتخاب کے بعد، کنٹرولر URLs کی ایک صف لوٹاتا ہے جسے ایپلیکیشن سیشن کے دوران پڑھ سکتی ہے۔ ایپلیکیشن بند ہونے کے بعد رسائی برقرار رکھنے کے لیے، آپ کو startAccessingSecurityScopedResource() کال کرنا ہوگا اور UserDefaults میں ایک سیکیورٹی اسکوپڈ بک مارک محفوظ کرنا ہوگا۔
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 کارڈ کو اسکین کر سکتی ہے اور صارف کا ڈیٹا نکال سکتی ہے اگر وہ خفیہ نہ ہو۔ لہٰذا، بیرونی اسٹوریج میں سادہ متن میں تصدیقی ٹوکنز، پاس ورڈز یا صارف کے ذاتی ڈیٹا کو ذخیرہ کرنے کی سختی سے سفارش نہیں کی جاتی ہے۔
Android 10+ پر، Scoped Storage مشترکہ فائل سسٹم تک ایپلیکیشنز کی رسائی کو نمایاں طور پر محدود کرتا ہے۔ ایک ایپلیکیشن اجازت کے بغیر صرف اپنی بنائی ہوئی فائلیں پڑھ سکتی ہے، اور دوسری ایپلیکیشنز کی فائلوں تک رسائی کے لیے SAF ڈائیلاگ کے ذریعے واضح صارف کی رضامندی درکار ہے۔ تاہم، یہ پابندی 29 سے کم ہدف SDK ورژن والی ایپلیکیشنز پر لاگو نہیں ہوتی — وہ پرانے ماڈل کے تحت کام کرتی رہتی ہیں، جو ان صارفین کے لیے خطرہ پیدا کرتی ہیں جنہوں نے اپنی ایپلیکیشنز کو اپ ڈیٹ نہیں کیا۔ Google Play 2021 سے تمام نئی اور اپ ڈیٹ کردہ ایپلیکیشنز کے لیے targetSdkVersion 29+ کی ضرورت ہے۔
فارمیٹنگ اور خفیہ کاری حفاظت کا ایک اور اہم پہلو ہے۔ پورٹیبل اسٹوریج کے طور پر فارمیٹ کردہ SD کارڈ ڈیفالٹ طور پر سسٹم کے ذریعے خفیہ نہیں کیا جاتا۔ قابل قبول اسٹوریج استعمال کرتے وقت بھی، خفیہ کاری صرف اس وقت فعال ہوتی ہے جب آلہ ساز نے فرم ویئر میں اس خصوصیت کو فعال کیا ہو۔ بیرونی اسٹوریج پر محفوظ حساس ڈیٹا کی حفاظت کے لیے، AndroidX Security سے EncryptedFile لائبریری استعمال کریں، جو سسٹم کی خفیہ کاری سے آزاد ہو کر AES256-GCM کا استعمال کرتے ہوئے ہر فائل کو الگ سے خفیہ کرتی ہے۔
بیرونی اسٹوریج کا مؤثر استعمال ڈیٹا کی دستیابی اور حفاظت کے درمیان توازن کی ضرورت ہے۔ صارف کی فائلوں کے قابل اعتماد ذخیرہ کو یقینی بنانے کے لیے ان اصولوں پر عمل کریں۔
Environment.getExternalStorageState() استعمال کریں۔ کارڈ ہٹایا جا سکتا ہے، خراب ہو سکتا ہے یا لکھنے کے لیے دستیاب نہیں ہو سکتایہ یاد رکھنا ضروری ہے کہ بیرونی اسٹوریج ناکامیوں کے دوران ڈیٹا کی سالمیت کی ضمانت نہیں دیتا۔ SD کارڈز میں دوبارہ تحریر کے چکروں کی محدود تعداد ہوتی ہے، خاص طور پر Class 4 اور Class 6 کے بجٹ ماڈلز۔ شدید تحریر (مثال کے طور پر، لاگنگ یا اسٹریمنگ ڈیٹا کیشنگ) کے ساتھ، ایک کارڈ چند مہینوں میں ناکام ہو سکتا ہے۔ ایسے منظرناموں کے لیے، داخلی میموری یا کلاؤڈ اسٹوریج استعمال کریں، اور بیرونی اسٹوریج پر صرف وہ فائلیں محفوظ کریں جن کے نقصان کو صارف قابل قبول سمجھے گا۔ StatFs کے ذریعے باقاعدگی سے SD کارڈ کی حالت چیک کریں اور صارف کو اہم فائل سسٹم کی غلطیوں کے بارے میں مطلع کریں۔
اکثر پوچھے گئے سوالات
Android 13+ پر، READ_EXTERNAL_STORAGE اجازت کو زیادہ تفصیلی اجازتوں سے تبدیل کر دیا گیا ہے: READ_MEDIA_IMAGES، READ_MEDIA_VIDEO اور READ_MEDIA_AUDIO۔ دیگر فائل اقسام کے لیے، SAF استعمال کریں۔
ہاں، قابل قبول اسٹوریج (adoptable storage) کی خصوصیت Android 6.0+ پر دستیاب ہے۔ کارڈ AES-128 خفیہ کاری کے ساتھ ext4 میں فارمیٹ ہوتا ہے۔ تاہم، بہت سے مینوفیکچررز اس آپشن کو غیر فعال کر دیتے ہیں، اور تقریباً 88% آلات قابل قبول اسٹوریج کو سپورٹ نہیں کرتے۔
Environment.getExternalStorageState() طریقہ استعمال کریں، جو ایک اسٹیٹس سٹرنگ لوٹاتا ہے۔ MEDIA_MOUNTED قدر کا مطلب ہے کہ کارڈ پڑھنے اور لکھنے کے لیے دستیاب ہے۔ دیگر قدریں غلطیوں یا کارڈ کی عدم موجودگی کی نشاندہی کرتی ہیں۔
Scoped Storage ایپلیکیشن کو اس کے اپنے کنٹینر اور مشترکہ MediaStore میڈیا گیلریوں تک محدود کرتا ہے۔ مکمل رسائی آلہ پر کسی بھی فائل کو پڑھنے کی اجازت دیتی ہے۔ Scoped Storage صارف کے ڈیٹا کی حفاظت کو بڑھاتا ہے اور نئی ایپلیکیشنز کے لیے لازمی ہے۔
ACTION_OPEN_DOCUMENT_TREE ایکشن کے ساتھ Intent لانچ کریں، جو سسٹم ڈائریکٹری سلیکٹر ڈائیلاگ کھولے گا۔ انتخاب کے بعد، آپ کو ریبوٹ تک درست URI اجازت ملتی ہے۔ بعد میں استعمال کے لیے اس URI کو SharedPreferences میں محفوظ کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں