Extern lagring Android: vad det är, typer av media och hur man arbetar i utveckling

Författare: IT Sectr Publicerad: 2026-03-13 Lästid: 11 min

Extern lagring på mobila enheter är ett flyttbart datamedium som alla appar med rätt behörigheter kan komma åt. Enligt Android Open Source Project, 2026, från och med Android 10 införde Google Scoped Storage — en modell som begränsar direkt åtkomst till filsystemet och kräver användning av MediaStore API för att arbeta med gemensamma mediafiler. Detta tillvägagångssätt ökar säkerheten för användardata och förhindrar informationsläckage mellan appar.

Huvudpunkter

  • External Storage — flyttbart lagringsutrymme (SD-kort, USB-OTG), tillgängligt för läsning och skrivning av olika appar
  • Scoped Storage på Android 10+ begränsar direkt åtkomst till filsystemet och ersätter det med MediaStore API
  • iOS stöder inte SD-kort — åtkomst till externa filer sker via Document Picker
  • Behörigheter READ_EXTERNAL_STORAGE och WRITE_EXTERNAL_STORAGE är obligatoriska för Android 9 och lägre
  • Formatering av SD-kort som internt eller portabelt lagringsutrymme bestämmer åtkomstmodell och kryptering

Vad är extern lagring på mobila enheter?

Extern lagring är ett minnesområde som inte ingår i appens skyddade sandlåda och är tillgängligt för andra program. På Android avses vanligtvis SD-kort med denna term, men extern lagring omfattar även USB-enheter anslutna via OTG-adapter och moln-enheter integrerade på filsystemnivå. Huvudskillnaden från intern lagring är avsaknaden av isolering: filer i extern lagring kan läsas och ändras av vilken app som helst med lämpliga behörigheter.

På Android presenteras extern lagring i två huvudlägen: portabel (portable) och intern (adoptable). Vid formatering av SD-kort som portabel lagring förblir det flyttbart och formateras till FAT32 eller exFAT. I adoptable storage-läge formateras kortet till ext4 och krypteras med AES-128, varefter systemet uppfattar det som en förlängning av det interna minnet. Adoptable-läget är tillgängligt från Android 6.0 Marshmallow, men tillverkare av enheter inaktiverar ofta denna funktion i sina firmware. Enligt Google Play Console-statistik stöder endast cirka 12% av Android-enheterna adoptable storage, så det rekommenderas inte att förlita sig enbart på utökning av internt minne via SD-kort som enda alternativ.

iOS finns inga traditionella SD-kort. Apple använder en sluten arkitektur där all lagring bygger på internt flashminne och iCloud. Extern enheter stöds via Lightning eller USB-C-port, men åtkomsten är begränsad till systemets filhanterare Files och appar som integreras med Document Picker. Användaren bestämmer själv vilka filer som ska öppnas från extern källa — appen kan inte skanna den anslutna enheten utan uttryckligt medgivande.

Typer av externa media och deras egenskaper

Valet av externt medium beror på kraven på hastighet, kapacitet och portabilitet. Olika typer av media har olika hastighetsegenskaper, filsystem och användningsscenarier i mobilappar.

MediatypMax kapacitetLäshastighetFilsystem
SD UHS-I2 TBupp till 104 MB/sexFAT / FAT32
SD UHS-II2 TBupp till 312 MB/sexFAT / FAT32
USB 3.0 OTG2 TBupp till 400 MB/sexFAT / NTFS / FAT32
USB-C SSD4 TBupp till 1000 MB/sexFAT / APFS / NTFS

SD-kort och hastighetsklasser

SD-kort klassificeras efter skrivhastighet: Class 10 (10 MB/s), U1 (10 MB/s), U3 (30 MB/s), V30 (30 MB/s) och V90 (90 MB/s). För inspelning av 4K-video krävs ett kort på minst U3 eller V30. För mobilappar som arbetar med stora mediafiler (fotoredigering, videoredigering) rekommenderas kort av klass U3 och högre. Kortets hastighet påverkar direkt appens prestanda: inspelning av 4K-video på ett Class 10-kort kan orsaka bildrutehopp på grund av otillräcklig bandbredd. När du väljer SD-kort för din app, var uppmärksam inte bara på hastighetsklassen utan även på Application Performance Class-betyget: A1 och A2 anger minsta prestanda för slumpmässig läsning och skrivning, vilket är kritiskt för databaser och app-cache.

USB-OTG-enheter

USB-OTG (On-The-Go) gör det möjligt att ansluta externa USB-enheter till mobila enheter via en adapter. Android stöder OTG från version 3.1, men för att montera enheten krävs en kärna med stöd för filsystemet. FAT32 och exFAT stöds inbyggt, NTFS — endast på enheter med anpassad kärna eller via Paragon-biblioteket. På iOS kom stöd för USB-enheter i iOS 13 tillsammans med appen Files. För att arbeta med enheten måste appen använda UIDocumentPickerViewController, som ger åtkomst endast till filer som användaren valt — iOS ger inte full åtkomst till enhetens filsystem.

Molnlagring som förlängning

Molntjänster — iCloud, Google Drive, Dropbox — kan integreras i enhetens filsystem via systemleverantörer. På iOS är iCloud Drive en del av appens sandlådebehållare och filer synkroniseras automatiskt mellan användarens enheter. På Android tillhandahåller Google Drive API för läsning och skrivning av filer, men ingen direkt montering i filsystemet sker. För mobilappar som arbetar med stora datamängder kan molnlagring fungera som ett alternativ till SD-kort, särskilt på enheter utan expansionsplats.

Hur man arbetar med extern lagring på Android

Arbete med extern lagring på Android beror på operativsystemets version och Scoped Storage-modellen. Processen för filåtkomst skiljer sig för Android 9 och lägre, Android 10–12 och Android 13+.

Åtkomst via MediaStore API

Från och med Android 10 är det huvudsakliga sättet att komma åt gemensamma mediafiler via MediaStore API. Detta API tillhandahåller ett enhetligt gränssnitt för läsning och skrivning av bilder, videor och ljudfiler i gemensam lagring. Appen kräver inte behörigheten READ_EXTERNAL_STORAGE för åtkomst till egna filer, men för läsning av andra appars filer krävs fortfarande uttryckligt användartillstånd. MediaStore indexerar automatiskt mediafiler och tillhandahåller ContentResolver för att söka efter dem.

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)

Efter att ha utfört frågan får du en Cursor som innehåller filernas URI:er. För att läsa filen öppnar du en InputStream via contentResolver.openInputStream(uri). Skrivning görs på liknande sätt via contentResolver.openOutputStream(uri). MediaStore hanterar automatiskt namnkonflikter och ger möjlighet att infoga nya filer via contentResolver.insert(uri, values), som returnerar URI för den skapade filen.

Arbete med godtyckliga filer via SAF

Storage Access Framework (SAF) — det rekommenderade sättet att komma åt godtyckliga filer på Android 10+. SAF tillhandahåller en systemdialog för filval, genom vilken användaren ger appen åtkomst till en specifik fil eller katalog. Appen får en åtkomst-URI som gäller tills enheten startas om eller tills behörigheten uttryckligen återkallas via inställningarna. SAF kräver inte behörigheterna READ_EXTERNAL_STORAGE eller WRITE_EXTERNAL_STORAGE, vilket förenklar publicering i Google Play och minskar antalet behörighetsförfrågningar.

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)

Hur man arbetar med extern lagring på iOS

På iOS sker arbete med externa filer via UIDocumentPickerViewController, som användaren öppnar för att välja specifika filer eller kataloger. Appen har inte direkt åtkomst till den externa enhetens filsystem — endast till de filer som användaren uttryckligen valt. Efter filval får appen en tillfällig URL i sandlådebehållaren och kan arbeta med filen via FileManager.

Användning av UIDocumentPickerViewController

UIDocumentPickerViewController låter användaren välja en eller flera filer från valfri tillgänglig källa: iCloud Drive, ansluten USB-enhet, extern molntjänst. Efter val returnerar kontrollen en array med URL:er som appen kan läsa under sessionen. För att behålla åtkomsten efter att appen stängts måste du anropa startAccessingSecurityScopedResource() och spara ett security-scoped bokmärke i 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)
}

Parametern asCopy: true innebär att iOS kopierar filen till appens sandlådebehållare och appen får en egen kopia oberoende av originalfilen. Om du anger asCopy: false får appen en referens till originalfilen, men för åtkomst måste du anropa url.startAccessingSecurityScopedResource(). Utan detta anrop kommer filläsning att orsaka ett undantag. Efter att ha arbetat klart med filen, anropa url.stopAccessingSecurityScopedResource() för att stänga resursen och förhindra läckage av deskriptorer.

Begränsningar och säkerhet för extern lagring

Säkerheten för extern lagring är lägre än för intern lagring eftersom filerna är tillgängliga för andra appar. Alla appar med behörigheten READ_EXTERNAL_STORAGE kan läsa alla filer på SD-kortet, inklusive de som din app skapade för tillfällig lagring av känslig data. En skadlig app kan skanna SD-kortet och extrahera användardata om de inte är krypterade. Därför rekommenderas det starkt att inte lagra autentiseringstoken, lösenord eller personlig användardata på extern lagring i okrypterad form.

På Android 10+ begränsar Scoped Storage avsevärt appars möjligheter att komma åt det gemensamma filsystemet. Appen kan utan tillstånd endast läsa filer som den själv skapat, och för åtkomst till andra appars filer krävs uttryckligt användarmedgivande via SAF-dialog. Denna begränsning gäller dock inte appar med mål-SDK-version lägre än 29 — de fortsätter att fungera enligt den gamla modellen, vilket skapar risk för användare som inte uppdaterat sina appar. Google Play har sedan 2021 krav på targetSdkVersion 29+ för alla nya och uppdaterade appar.

Formatering och kryptering — ytterligare en viktig säkerhetsaspekt. Ett SD-kort formaterat som portabel lagring krypteras inte av systemet som standard. Även vid användning av adoptable storage aktiveras kryptering endast om enhetstillverkaren har aktiverat denna funktion i firmware. För att skydda känslig data som lagras på extern lagring, använd biblioteket EncryptedFile från AndroidX Security, som krypterar varje fil separat med AES256-GCM, oberoende av systemkryptering.

Rekommendationer för användning av extern lagring

Effektiv användning av extern lagring kräver balans mellan datatillgänglighet och säkerhet. Följ dessa regler för att säkerställa tillförlitlig lagring av användarfiler.

  • Förvara inte känslig data på extern lagring utan kryptering. Använd EncryptedFile eller EncryptedSharedPreferences för att skydda token, lösenord och personlig data
  • Kontrollera tillgängligheten av extern lagring före skrivning: använd Environment.getExternalStorageState() för att kontrollera SD-kortets status. Kortet kan vara borttaget, skadat eller inte tillgängligt för skrivning
  • Använd Scoped Storage på Android 10+ och SAF för åtkomst till gemensamma filer. Detta minskar antalet begärda behörigheter och förbättrar användarupplevelsen
  • Hantera alltid undantag vid arbete med extern lagring. En fil kan tas bort av en annan app eller flyttas under läsning, vilket orsakar FileNotFoundException
  • Varna användaren före skrivning av stora datamängder till extern lagring. Visa en bekräftelsedialog och ge möjlighet att välja katalog via SAF

Det är viktigt att komma ihåg att extern lagring inte garanterar databevarande vid fel. SD-kort har begränsad livslängd för skrivcykler, särskilt billigare modeller av Class 4 och Class 6. Vid intensiv skrivning (t.ex. loggning eller cachning av strömmande data) kan kortet gå sönder inom några månader. För sådana scenarier, använd internt minne eller molnlagring, och på extern lagring spara endast filer vars förlust användaren anser acceptabel. Kontrollera regelbundet SD-kortets status via StatFs och informera användaren om kritiska filsystemfel.

Vanliga frågor

Krävs behörighet för åtkomst till extern lagring på Android 13?

Android 13+ har behörigheten READ_EXTERNAL_STORAGE ersatts av mer detaljerade: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO och READ_MEDIA_AUDIO. För åtkomst till andra filtyper, använd SAF.

Kan man formatera SD-kort som internt minne?

Ja, funktionen adoptable storage finns tillgänglig på Android 6.0+. Kortet formateras till ext4 med AES-128-kryptering. Men många tillverkare inaktiverar detta alternativ, och cirka 88% av enheterna stöder inte adoptable storage.

Hur kontrollerar man om ett SD-kort är isatt i enheten?

Använd metoden Environment.getExternalStorageState(), som returnerar en statussträng. Värdet MEDIA_MOUNTED innebär att kortet är tillgängligt för läsning och skrivning. Andra värden indikerar fel eller att kortet saknas.

Vad är skillnaden mellan Scoped Storage och full filsystemåtkomst?

Scoped Storage begränsar appen till dess egen behållare och gemensamma MediaStore-mediebibliotek. Full åtkomst tillåter läsning av alla filer på enheten. Scoped Storage ökar säkerheten för användardata och är obligatoriskt för nya appar.

Hur får jag URI för åtkomst till en fil på SD-kortet via SAF?

Starta ett Intent med åtgärden ACTION_OPEN_DOCUMENT_TREE, som öppnar systemets katalogvalsdialog. Efter val får du en URI-behörighet som gäller till omstart. Spara denna URI i SharedPreferences för framtida användning.

Sammanfattning

  • External Storage — flyttbart lagringsutrymme (SD-kort, USB-OTG), tillgängligt för alla appar med lämpliga behörigheter
  • Scoped Storage på Android 10+ begränsar direkt åtkomst till filsystemet och inför MediaStore API för mediafiler
  • iOS stöder inte SD-kort — åtkomst till externa filer endast via UIDocumentPickerViewController
  • SD-kort delas in i hastighetsklasser: Class 10, U1, U3, V30, V90 — för 4K-videoinspelning krävs minst U3
  • Säkerhet för extern lagring är lägre än intern — kryptera känslig data före skrivning
  • Adoptable storage låter dig använda SD-kort som förlängning av internt minne, men stöds endast på 12% av enheterna
  • Rekommenderas att använda SAF för åtkomst till godtyckliga filer och inte lagra kritisk data utan kryptering

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också