Mobil cihazlarda xarici yaddaş dəyişdirilə bilən daşıyıcıdır, ona müvafiq icazələri olan istənilən tətbiq daxil ola bilər. Android Open Source Project, 2026-nın məlumatlarına görə, Android 10-dan başlayaraq Google Scoped Storage modelini tətbiq etdi — bu model fayl sisteminə birbaşa girişi məhdudlaşdırır və ümumi media faylları ilə işləmək üçün MediaStore API-nin istifadəsini tələb edir. Bu yanaşma istifadəçi məlumatlarının təhlükəsizliyini artırır və tətbiqlər arasında məlumat sızıntısının qarşısını alır.
Başlıca
READ_EXTERNAL_STORAGE və WRITE_EXTERNAL_STORAGE Android 9 və aşağı üçün məcburidirXarici yaddaş tətbiqin qorunan qum qutusuna daxil olmayan və digər proqramlar üçün əlçatan olan yaddaş sahəsidir. Android-də bu termin adətən SD kartı nəzərdə tutur, lakin xarici yaddaşa OTG adapteri vasitəsilə qoşulmuş USB disklər və fayl sistemi səviyyəsində inteqrasiya olunmuş bulud diskləri də daxildir. Internal Storage-dən əsas fərq — izolyasiyanın olmamasıdır: xarici yaddaşdakı faylları müvafiq icazələri almış istənilən tətbiq oxuya və dəyişdirə bilər.
Android-də xarici yaddaş iki əsas rejimdə təqdim olunur: portativ (portable) və daxili (adoptable). SD kartı portativ yaddaş kimi formatlaşdırarkən o, çıxarıla bilən olaraq qalır və FAT32 və ya exFAT formatında formatlaşdırılır. Adoptable storage rejimində kart ext4 formatında formatlaşdırılır və AES-128 şifrələməsi ilə qorunur, bundan sonra sistem onu daxili yaddaşın genişlənməsi kimi qəbul edir. Adoptable rejimi Android 6.0 Marshmallow-dan etibarən ələçətdir, lakin cihaz istehsalçıları tez-tez bu seçimi öz proşirmələrindən söndürürlər. Google Play Console statistikalarına görə, Android cihazlarının yalnız təxminən 12%-i adoptable storage-i dəstəkləyir, buna görə də SD kart vasitəsilə daxili yaddaşı genişləndirməyə yeganə variant kimi etibar etmək tövsiyə edilmir.
iOS-də ənənəvi SD kartlar yoxdur. Apple qapalı arxitekturadan istifadə edir, burada bütün yaddaş daxili flash yaddaş və iCloud əsasında qurulur. Xarici disklər Lightning və ya USB-C portu vasitəsilə dəstəklənir, lakin onlara giriş sistem fayl meneceri Files və Document Picker ilə inteqrasiya olunan tətbiqlərlə məhdudlaşdırılır. İstifadəçinin özü xarici mənbədən hansı faylları açacağına qərar verir — tətbiq açıq razılıq olmadan qoşulmuş diski skan edə bilməz.
Xarici daşıyıcının seçimi sürət, həcm və portativlik tələblərindən asılıdır. Müxtəlif daşıyıcı növlərinin mobil tətbiqlərdə müxtəlif sürət xarakteristikaları, fayl sistemləri və istifadə ssenariləri var.
| Daşıyıcı növü | Maks. həcm | Oxu sürəti | Fayl sistemi |
|---|---|---|---|
| SD UHS-I | 2 TB | 104 MB/s-dək | exFAT / FAT32 |
| SD UHS-II | 2 TB | 312 MB/s-dək | exFAT / FAT32 |
| USB 3.0 OTG | 2 TB | 400 MB/s-dək | exFAT / NTFS / FAT32 |
| USB-C SSD | 4 TB | 1000 MB/s-dək | exFAT / APFS / NTFS |
SD kartlar yazma sürətinə görə təsnif edilir: Class 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) və V90 (90 MB/s). 4K video yazmaq üçün ən azı U3 və ya V30 kart tələb olunur. Böyük media faylları ilə işləyən mobil tətbiqlər üçün (foto emalı, video montaj) U3 və daha yuxarı sinif kartların istifadəsi tövsiyə olunur. Kartın sürəti birbaşa tətbiqin performansına təsir edir: Class 10 karta 4K video yazmaq əlçatanlıq qabiliyyətinin yetərsizliyi səbəbindən kadrların atlanmasına səbəb ola bilər. Tətbiq üçün SD kart seçərkən təkcə sürət sinfinə deyil, həm də Application Performance Class reytinqinə diqqət yetirin: A1 və A2 məlumat bazaları və tətbiq keşi üçün kritik əhəmiyyət kəsb edən təsadüfî oxu və yazmanın minimal performansını göstərir.
USB-OTG (On-The-Go) adapter vasitəsilə mobil cihaza xarici USB diskləri qoşmağa imkan verir. Android OTG-ni 3.1 versiyasından dəstəkləyir, lakin diskin mount edilməsi üçün fayl sistemi dəstəyi olan növə tələb olunur. FAT32 və exFAT əsas dəstəklənir, NTFS — yalnız xüsusi növəli cihazlarda və ya Paragon kitabxanası vasitəsilə. iOS-də USB disklərin dəstəyi iOS 13-də Files tətbiqi ilə birlikdə peyda oldu. Disklə işləmək üçün tətbiq yalnız istifadəçi tərəfindən seçilmiş fayllara giriş açan UIDocumentPickerViewController-dən istifadə etməlidir — iOS diskin fayl sisteminə tam giriş təmin etmir.
Bulud xidmətləri — iCloud, Google Drive, Dropbox — sistem təminatçıları vasitəsilə cihazın fayl sistemi ilə inteqrasiya edə bilər. iOS-də iCloud Drive tətbiqin Sandbox konteynerinin bir hissəsidir və fayllar avtomatik olaraq istifadəçinin cihazları arasında sinxronlaşdırılır. Android-də Google Drive faylları oxumaq və yazmaq üçün API təmin edir, lakin birbaşa fayl sisteminə mount edilmə baş vermir. Böyük həcmdə məlumatlarla işləyən mobil tətbiqlər üçün bulud yaddaşı xüsusilə genişləndirmə yuvası olmayan cihazlarda SD karta alternativ ola bilər.
Android-də xarici yaddaşla işləmək əməliyyat sisteminin versiyasından və Scoped Storage modelindən asılıdır. Fayllara giriş prosesi Android 9 və aşağı, Android 10–12 və Android 13+ üçün fərqlənir.
Android 10-dan başlayaraq, ümumi media fayllarına girişin əsas yolu MediaStore API-dir. Bu API ümumi yaddaşda şəkillərin, videoların və audio faylların oxunması və yazılması üçün vahid interfeys təmin edir. Tətbiq öz fayllarına giriş üçün READ_EXTERNAL_STORAGE icazəsi tələb etmir, lakin digər tətbiqlərin fayllarını oxumaq üçün hələ də istifadəçinin açıq razılığı lazımdır. MediaStore media fayllarını avtomatik indeksləşdirir və onları sorğular üçün ContentResolver təmin edir.
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)
Sorğun icrasından sonra faylların URI-lərini ehtiva edən Cursor alırsınız. Faylı oxumaq üçün contentResolver.openInputStream(uri) vasitəsilə InputStream açın. Yazma eyni şəkildə contentResolver.openOutputStream(uri) vasitəsilə həyata keçirilir. MediaStore avtomatik olaraq ad konfliktlərini həll edir və contentResolver.insert(uri, values) vasitəsilə yeni faylların əlavə edilməsinə imkan verir ki, bu da yaradılmış faylın URI-sini qaytarır.
Storage Access Framework (SAF) — Android 10+-da ixtiyari fayllara giriş üçün tövsiyə olunan üsuldur. SAF istifadəçinin məhz bir fayla və ya qovluğa giriş icazəsi verdiyi sistem fayl seçimi dialoqunu təmin edir. Tətbiq cihaz yenidən başladılana və ya icazə parametrlərdə açıq şəkildə ləğv edilənə qədər etibarlı olan giriş URI-si alır. SAF READ_EXTERNAL_STORAGE və WRITE_EXTERNAL_STORAGE icazələrini tələb etmir, bu da Google Play-də nəşri sadələşdirir və icazə sorğularının sayını azaldır.
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-də xarici fayllarla iş istifadəçinin konkret faylları və ya qovluqları seçmək üçün açdığı UIDocumentPickerViewController vasitəsilə həyata keçirilir. Tətbiqin xarici diskin fayl sisteminə birbaşa girişi yoxdur — yalnız istifadəçinin açıq şəkildə seçdiyi fayllara. Fayl seçildikdən sonra tətbiq Sandbox konteynerində müvəqqəti URL ünvanı alır və FileManager vasitəsilə faylla işləyə bilər.
UIDocumentPickerViewController istifadəçiyə hər hansı əlçatan mənbədən bir və ya bir neçə fayl seçməyə imkan verir: iCloud Drive, qoşulmuş USB disk, üçüncü tərəf bulud xidməti. Seçimdən sonra nəzarətçi tətbiqin sessiya ərzində oxuya biləcəyi URL ünvanları massivini qaytarır. Tətbiq bağlandıqdan sonra girişi qorumaq üçün startAccessingSecurityScopedResource() çağırılmalı və təhlükəsizlik əhatəli əlfəcin UserDefaults-da saxlanmalıdır.
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 parametri o deməkdir ki, iOS faylı tətbiqin Sandbox konteynerinə kopyalayacaq və tətbiq orijinal fayldan asılı olmayan öz surətini alacaq. asCopy: false olduqda tətbiq orijinal fayla keçid alır, lakin ona giriş üçün url.startAccessingSecurityScopedResource() çağırılmalıdır. Bu çağırış olmadan faylı oxumaq istisnaya səbəb olacaq. Faylla iş bitdikdən sonra mütləq url.stopAccessingSecurityScopedResource() çağırılmalıdır ki, resurs bağlansın və deskriptor sızıntısının qarşısı alınsın.
Xarici yaddaşın təhlükəsizliyi Internal Storage-dən aşağıdır, çünki fayllar digər tətbiqlər üçün əlçatandır. READ_EXTERNAL_STORAGE icazəsi olan istənilən tətbiq SD kartdakı bütün faylları, o cümlədən tətbiqinizin məxfi məlumatların müvəqqəti saxlanması üçün yaratdığı faylları oxuya bilər. Zərərli tətbiq SD kartı skan edə və şifrələnməmiş olduqda istifadəçi məlumatlarını əldə edə bilər. Buna görə də autentifikasiya tokenlərini, şifrələri və ya istifadəçinin şəxsi məlumatlarını xarici yaddaşda açıq şəkildə saxlamaq qətiyyən tövsiyə edilmir.
Android 10+-da Scoped Storage tətbiqlərin ümumi fayl sisteminə giriş imkanlarını əhəmiyyətli dərəcədə məhdudlaşdırır. Tətbiq icazəsiz yalnız özünün yaratdığı faylları oxuya bilər, digər tətbiqlərin fayllarına giriş üçün isə SAF dialoqu vasitəsilə istifadəçinin açıq razılığı tələb olunur. Lakin bu məhdudiyyət hədəf SDK versiyası 29-dan aşağı olan tətbiqlərə şamil edilmir — onlar köhnə model üzrə işləməyə davam edir ki, bu da tətbiqlərini yeniləməmiş istifadəçilər üçün risk yaradır. Google Play 2021-ci ildən bütün yeni və yenilənən tətbiqlər üçün targetSdkVersion 29+ tələb edir.
Formatlaşdırma və şifrələmə — təhlükəsizliyin digər mühüm aspektidir. Portativ yaddaş kimi formatlaşdırılmış SD kart sistem tərəfindən susmaya görə şifrələnmir. Adoptable storage istifadə edilsə belə, şifrələmə yalnız cihaz istehsalçısı bu imkanı proşirməyə daxil etdikdə aktivləşdirilir. Xarici yaddaşda saxlanılan məxfi məlumatları qorumaq üçün hər bir faylı sistem şifrələməsindən asılı olmayaraq AES256-GCM ilə ayrıca şifrələyən AndroidX Security-dən EncryptedFile kitabxanasından istifadə edin.
Xarici yaddaşın səmərəli istifadəsi məlumatların əlçatanlığı ilə təhlükəsizlik arasında balans tələb edir. İstifadəçi fayllarının etibarlı saxlanmasını təmin etmək üçün aşağıdakı qaydalara əməl edin.
Environment.getExternalStorageState() istifadə edin. Kart çıxarılmış, zədələnmiş və ya yazma üçün əlçatan olmaya bilərXatırlamaq vacibdir ki, xarici yaddaş nasazlıqlar zamanı məlumatların təhlükəsizliyinə zəmanət vermir. SD kartların, xüsusilə Class 4 və Class 6 büdcə modellərinin məhdud yazma dövrə resursu var. Sıx yazma zamanı (məsələn, loqlama və ya axın məlumatların keşlənməsi) kart bir neçə ay ərzində sıradan çıxa bilər. Belə ssenarilər üçün daxili yaddaş və ya bulud yaddaşından istifadə edin və xarici yaddaşda yalnız itkisini istifadəçinin məqbul hesab edəcəyi faylları saxlayın. SD kartın vəziyyətini StatFs vasitəsilə müztərən yoxlayın və istifadəçini fayl sisteminin kritik xətaları barədə məlumatlandırın.
Tez-tez verilən suallar
Android 13+-da READ_EXTERNAL_STORAGE icazəsi daha detallı icazələrlə əvəz edilmişdir: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO və READ_MEDIA_AUDIO. Digər fayl növlərinə giriş üçün SAF-dən istifadə edin.
Bəli, adoptable storage funksiyası Android 6.0+-da mövcuddur. Kart AES-128 şifrələməsi ilə ext4 formatında formatlaşdırılır. Lakin bir çox istehsalçı bu seçimi söndürür və cihazların təxminən 88%-i adoptable storage-i dəstəkləmir.
Vəziyyət sətrini qaytaran Environment.getExternalStorageState() metodundan istifadə edin. MEDIA_MOUNTED dəyəri kartın oxuma və yazma üçün əlçatan olduğunu bildirir. Digər dəyərlər xəta və ya kartın olmamasını göstərir.
Scoped Storage tətbiqi onun öz konteyneri və ümumi MediaStore media kitabxanaları ilə məhdudlaşdırır. Tam giriş cihazdakı istənilən faylın oxunmasına icazə verir. Scoped Storage istifadəçi məlumatlarının təhlükəsizliyini artırır və yeni tətbiqlər üçün məcburidir.
Qovluq seçimi sistem dialoqunu açacaq ACTION_OPEN_DOCUMENT_TREE əməliyyatı ilə Intent işə salın. Seçimdən sonra yenidən başlatmaya qədər etibarlı olan URI-icazə alacaqsınız. Bu URI-ni sonrakı istifadə üçün SharedPreferences-də saxlayın.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun