Stocare externă Android: ce este, tipuri de medii și cum să lucrați în dezvoltare

Autor: IT Sectr Publicat: 2026-03-13 Timp de citire: 11 min

Stocarea externă pe dispozitivele mobile este un mediu de date detașabil, la care orice aplicație cu permisiunile corespunzătoare poate avea acces. Potrivit Android Open Source Project, 2026, începând cu Android 10, Google a introdus Scoped Storage — un model care limitează accesul direct la sistemul de fișiere și necesită utilizarea MediaStore API pentru lucrul cu fișierele media partajate. Această abordare sporește securitatea datelor utilizatorilor și previne scurgerile de informații între aplicații.

Principalele aspecte

  • External Storage — stocare detașabilă (card SD, USB-OTG), accesibilă pentru citire și scriere de către diferite aplicații
  • Scoped Storage în Android 10+ limitează accesul direct la sistemul de fișiere și îl înlocuiește cu MediaStore API
  • iOS nu suportă carduri SD — accesul la fișierele externe se realizează prin Document Picker
  • Permisiunile READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE sunt obligatorii pentru Android 9 și versiunile anterioare
  • Formatarea cardului SD ca stocare internă sau portabilă determină modelul de acces și criptare

Ce este stocarea externă pe dispozitivele mobile?

Stocare externă — este o zonă de memorie care nu face parte din sandbox-ul protejat al aplicației și este accesibilă altor programe. Pe Android, acest termen se referă de obicei la cardul SD, dar stocarea externă include, de asemenea, unități USB conectate prin adaptor OTG și discuri cloud integrate la nivelul sistemului de fișiere.

Pe Android, stocarea externă este prezentată în două moduri principale: portabil și adoptabil (adoptable). La formatarea cardului SD ca stocare portabilă, acesta rămâne detașabil și este formatat în FAT32 sau exFAT. În modul adoptable storage, cardul este formatat în ext4 și criptat cu AES-128, după care sistemul îl percepe ca o extensie a memoriei interne. Modul adoptable este disponibil începând cu Android 6.0 Marshmallow, dar producătorii de dispozitive deseori dezactivează această opțiune în firmware-urile lor. Conform statisticilor Google Play Console, doar aproximativ 12% dintre dispozitivele Android suportă adoptable storage, prin urmare nu se recomandă să vă bazați pe extinderea memoriei interne prin card SD ca unică opțiune.

Pe iOS nu există carduri SD tradiționale. Apple utilizează o arhitectură închisă, în care totul se bazează pe memoria flash internă și iCloud. Unitățile externe sunt suportate prin portul Lightning sau USB-C, dar accesul la ele este limitat la managerul de fișiere Files și aplicațiile care se integrează cu Document Picker. Utilizatorul decide singur ce fișiere să deschidă din sursa externă — aplicația nu poate scana unitatea conectată fără acordul explicit.

Tipuri de medii externe și caracteristicile lor

Alegerea mediului extern depinde de cerințele de viteză, capacitate și portabilitate. Diferite tipuri de medii au caracteristici de viteză, sisteme de fișiere și scenarii de utilizare variate în aplicațiile mobile.

Tipul mediuluiCapacitatea maximăViteza de citireSistemul de fișiere
SD UHS-I2 TBpână la 104 MB/sexFAT / FAT32
SD UHS-II2 TBpână la 312 MB/sexFAT / FAT32
USB 3.0 OTG2 TBpână la 400 MB/sexFAT / NTFS / FAT32
USB-C SSD4 TBpână la 1000 MB/sexFAT / APFS / NTFS

Cardurile SD și clasele de viteză

Cardurile SD sunt clasificate după viteza de scriere: Class 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) și V90 (90 MB/s). Pentru înregistrarea video 4K este necesar un card de cel puțin U3 sau V30. Pentru aplicațiile mobile care lucrează cu fișiere media mari (procesare foto, editare video), se recomandă utilizarea cardurilor de clasă U3 și superioară. Viteza cardului influențează direct performanța aplicației: înregistrarea video 4K pe un card Class 10 poate cauza pierderea cadrelor din cauza lățimii de bandă insuficiente. La alegerea unui card SD pentru aplicație, acordați atenție nu numai clasei de viteză, ci și ratingului Application Performance Class: A1 și A2 indică performanța minimă de citire și scriere aleatoare, critică pentru funcționarea bazelor de date și a cache-ului aplicațiilor.

Unități USB-OTG

USB-OTG (On-The-Go) permite conectarea unităților USB externe la dispozitivul mobil printr-un adaptor. Android suportă OTG începând cu versiunea 3.1, dar pentru montarea unității este necesar un kernel cu suport pentru sistemul de fișiere. FAT32 și exFAT sunt suportate din fabrică, NTFS — doar pe dispozitive cu kernel personalizat sau prin biblioteca Paragon. Pe iOS, suportul pentru unități USB a apărut în iOS 13 odată cu aplicația Files. Pentru a lucra cu unitatea, aplicația trebuie să utilizeze UIDocumentPickerViewController, care deschide accesul doar la fișierele selectate de utilizator — iOS nu oferă acces complet la sistemul de fișiere al unității.

Stocarea în cloud ca extensie

Serviciile cloud — iCloud, Google Drive, Dropbox — se pot integra în sistemul de fișiere al dispozitivului prin intermediul furnizorilor de sistem. Pe iOS, iCloud Drive face parte din containerul Sandbox al aplicației, iar fișierele se sincronizează automat între dispozitivele utilizatorului. Pe Android, Google Drive oferă API pentru citirea și scrierea fișierelor, dar nu are loc o montare directă în sistemul de fișiere. Pentru aplicațiile mobile care lucrează cu volume mari de date, stocarea în cloud poate servi ca alternativă la cardul SD, în special pe dispozitivele fără slot de extensie.

Cum să lucrați cu stocarea externă pe Android

Lucrul cu stocarea externă pe Android depinde de versiunea sistemului de operare și de modelul Scoped Storage. Procesul de accesare a fișierelor diferă pentru Android 9 și versiunile anterioare, Android 10–12 și Android 13+.

Accesul prin MediaStore API

Începând cu Android 10, principala modalitate de acces la fișierele media partajate este MediaStore API. Acest API oferă o interfață unificată pentru citirea și scrierea imaginilor, videoclipurilor și fișierelor audio în stocarea partajată. Aplicația nu necesită permisiunea READ_EXTERNAL_STORAGE pentru accesul la propriile fișiere, dar pentru citirea fișierelor altor aplicații este în continuare necesar acordul explicit al utilizatorului. MediaStore indexează automat fișierele media și oferă ContentResolver pentru interogarea lor.

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)

După executarea interogării, obțineți un Cursor care conține URI-urile fișierelor. Pentru citirea fișierului, deschideți InputStream prin contentResolver.openInputStream(uri). Scrierea se execută similar prin contentResolver.openOutputStream(uri). MediaStore gestionează automat conflictele de nume și oferă posibilitatea de a insera fișiere noi prin contentResolver.insert(uri, values), care returnează URI-ul fișierului creat.

Lucrul cu fișiere arbitrare prin SAF

Storage Access Framework (SAF) — metoda recomandată pentru accesul la fișiere arbitrare pe Android 10+. SAF oferă un dialog sistemic de selectare a fișierelor, prin care utilizatorul acordă aplicației acces la un anumit fișier sau director. Aplicația primește un URI de acces care este valabil până la repornirea dispozitivului sau până la revocarea explicită a permisiunii prin setări. SAF nu necesită permisiunile READ_EXTERNAL_STORAGE sau WRITE_EXTERNAL_STORAGE, ceea ce simplifică publicarea în Google Play și reduce numărul de cereri de permisiuni.

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)

Cum să lucrați cu stocarea externă pe iOS

Pe iOS, lucrul cu fișiere externe se realizează prin UIDocumentPickerViewController, pe care utilizatorul îl deschide pentru a selecta anumite fișiere sau directoare. Aplicația nu are acces direct la sistemul de fișiere al unității externe — doar la fișierele pe care utilizatorul le-a selectat explicit. După selectarea fișierului, aplicația primește un URL temporar în containerul Sandbox și poate lucra cu fișierul prin FileManager.

Utilizarea UIDocumentPickerViewController

UIDocumentPickerViewController permite utilizatorului să selecteze unul sau mai multe fișiere din orice sursă disponibilă: iCloud Drive, unitate USB conectată, serviciu cloud terț. După selectare, controlerul returnează un tablou de URL-uri pe care aplicația le poate citi pe parcursul sesiunii. Pentru a păstra accesul după închiderea aplicației, trebuie apelată startAccessingSecurityScopedResource() și salvat un bookmark securizat în 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)
}

Parametrul asCopy: true înseamnă că iOS va copia fișierul în containerul Sandbox al aplicației, iar aplicația va primi o copie proprie, independentă de fișierul original. Dacă se specifică asCopy: false, aplicația primește o referință la fișierul original, dar pentru accesarea acestuia trebuie apelată url.startAccessingSecurityScopedResource(). Fără acest apel, citirea fișierului va genera o excepție. După finalizarea lucrului cu fișierul, asigurați-vă că apelați url.stopAccessingSecurityScopedResource(), pentru a închide resursa și a preveni scurgerile de descriptori.

Limitări și securitatea stocării externe

Securitatea stocării externe este mai scăzută decât cea a Internal Storage, deoarece fișierele sunt accesibile altor aplicații. Orice aplicație cu permisiunea READ_EXTERNAL_STORAGE poate citi toate fișierele de pe cardul SD, inclusiv cele pe care aplicația dumneavoastră le-a creat pentru stocarea temporară a datelor confidențiale. O aplicație malitioasă poate scana cardul SD și extrage datele utilizatorului, dacă acestea nu sunt criptate. Prin urmare, nu se recomandă categoric stocarea tokenurilor de autentificare, parolelor sau datelor personale ale utilizatorului în stocarea externă în formă necriptată.

Pe Android 10+ Scoped Storage limitează semnificativ posibilitățile aplicațiilor de a accesa sistemul de fișiere partajat. Aplicația poate citi fără permisiune doar fișierele create de ea însăși, iar pentru accesul la fișierele altor aplicații este necesar acordul explicit al utilizatorului prin dialogul SAF. Cu toate acestea, această limitare nu se aplică aplicațiilor cu versiunea țintă SDK sub 29 — ele continuă să funcționeze conform modelului vechi, ceea ce creează un risc pentru utilizatorii care nu și-au actualizat aplicațiile. Google Play din 2021 necesită targetSdkVersion 29+ pentru toate aplicațiile noi și actualizate.

Formatarea și criptarea — un alt aspect important al securității. Cardul SD formatat ca stocare portabilă nu este criptat de sistem în mod implicit. Chiar și la utilizarea adoptable storage, criptarea se activează doar dacă producătorul dispozitivului a inclus această opțiune în firmware. Pentru protejarea datelor confidențiale stocate pe stocarea externă, utilizați biblioteca EncryptedFile din AndroidX Security, care criptează fiecare fișier separat cu AES256-GCM, independent de criptarea sistemică.

Recomandări pentru utilizarea stocării externe

Utilizarea eficientă a stocării externe necesită un echilibru între disponibilitatea datelor și securitate. Respectați următoarele reguli pentru a asigura o stocare sigură a fișierelor utilizatorilor.

  • Nu stocați date confidențiale fără criptare. Utilizați EncryptedFile sau EncryptedSharedPreferences pentru protejarea tokenurilor, parolelor și datelor personale
  • Verificați disponibilitatea stocării externe înainte de scriere: utilizați Environment.getExternalStorageState() pentru a verifica starea cardului SD. Cardul poate fi scos, deteriorat sau indisponibil pentru scriere
  • Utilizați Scoped Storage pe Android 10+ și SAF pentru accesul la fișierele partajate. Aceasta reduce numărul de permisiuni solicitate și îmbunătățește experiența utilizatorului
  • Gestionați întotdeauna excepțiile atunci când lucrați cu stocarea externă. Fișierul poate fi șters de o altă aplicație sau mutat în momentul citirii, ceea ce va provoca FileNotFoundException
  • Avertizați utilizatorul înainte de a scrie volume mari de date pe stocarea externă. Afișați un dialog de confirmare și oferiți posibilitatea de a selecta un director prin SAF

Este important să rețineți că stocarea externă nu garantează integritatea datelor în caz de defecțiuni. Cardurile SD au un număr limitat de cicluri de rescriere, în special modelele bugetare de clasă Class 4 și Class 6. La scrierea intensivă (de exemplu, logarea sau cache-ul datelor în flux), cardul se poate defecta în câteva luni. Pentru astfel de scenarii, utilizați memoria internă sau stocarea în cloud, iar pe stocarea externă păstrați doar fișierele a căror pierdere utilizatorul o consideră acceptabilă. StatFs și informați utilizatorul despre erorile critice ale sistemului de fișiere.

întrebări frecvente

Este necesară permisiunea pentru accesul la stocarea externă pe Android 13?

Pe Android 13+ permisiunea READ_EXTERNAL_STORAGE a fost înlocuită cu unele mai granulare: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO și READ_MEDIA_AUDIO. Pentru accesul la alte tipuri de fișiere, utilizați SAF.

Se poate formata cardul SD ca memorie internă?

Da, funcția adoptable storage este disponibilă în Android 6.0+. Cardul este formatat în ext4 cu criptare AES-128. Cu toate acestea, mulți producători dezactivează această opțiune, iar aproximativ 88% dintre dispozitive nu suportă adoptable storage.

Cum verific dacă un card SD este instalat în dispozitiv?

Utilizați metoda Environment.getExternalStorageState(), care returnează un șir de stare. Valoarea MEDIA_MOUNTED înseamnă că cardul este disponibil pentru citire și scriere. Celelalte valori indică erori sau absența cardului.

Care este diferența dintre Scoped Storage și accesul complet la sistemul de fișiere?

Scoped Storage limitează aplicația la propriul său container și la mediatheca MediaStore partajată. Accesul complet permite citirea oricăror fișiere de pe dispozitiv. datelor utilizatorului și este obligatoriu pentru aplicațiile noi.

Cum obțin un URI pentru accesul la un fișier de pe cardul SD prin SAF?

Lansați un Intent cu acțiunea ACTION_OPEN_DOCUMENT_TREE, care va deschide un dialog sistemic de selectare a directorului. După selectare, veți primi o permisiune URI valabilă până la repornire. Salvați acest URI în SharedPreferences pentru utilizare ulterioară.

Concluzii

  • External Storage — stocare detașabilă (card SD, USB-OTG), accesibilă tuturor aplicațiilor cu permisiunile corespunzătoare
  • Scoped Storage în Android 10+ limitează accesul direct la sistemul de fișiere și introduce MediaStore API pentru fișierele media
  • iOS nu suportă carduri SD — accesul la fișierele externe doar prin UIDocumentPickerViewController
  • Cardurile SD sunt împărțite pe clase de viteză: Class 10, U1, U3, V30, V90 — pentru înregistrarea video 4K este necesar cel puțin U3
  • Securitatea stocării externe este mai scăzută decât cea internă — criptați datele confidențiale înainte de scriere
  • Adoptable storage permite utilizarea cardului SD ca extensie a memoriei interne, dar este suportat doar pe 12% dintre dispozitive
  • Se recomandă să utilizați SAF pentru accesul la fișiere arbitrare și să nu stocați date critice fără criptare

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și