Photo Library Permission — grunder, åtkomsttyper och funktionsprincip

Författare: IT Sectr Publicerad: 2026-05-21 Lästid: 8 min

Photo Library Permission — är den behörighet som en app behöver för att få åtkomst till foton och videor som lagras på användarens enhet. Den krävs för att välja bilder från galleriet, spara mediafiler och hantera fotoalbum. Enligt Apple Developer Documentation, 2024 måste appar från och med iOS 14 begära åtkomst till ett begränsat bibliotek, inte till alla foton på en gång.

Huvudpunkter

  • Photo Library Permission — behörighet att läsa och skriva mediafiler i enhetens galleri, obligatorisk för arbete med foton och videor.
  • Android använder READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) eller READ_EXTERNAL_STORAGE för åtkomst till galleriet.
  • iOS använder PHPhotoLibrary med begränsad åtkomst (Limited Photo Library Access) från och med iOS 14.
  • Val av enskilda foton via systemväljaren (PhotoPicker) kräver inte behörighet att få åtkomst till hela biblioteket.
  • Skrivning till galleriet kräver separat skrivbehörighet (WRITE_EXTERNAL_STORAGE på Android, PHPhotoLibrary på iOS).

Grunderna i Photo Library Permission

Photo Library Permission — är systembehörigheten som reglerar en apps åtkomst till mediafiler som lagras på enheten. Den omfattar både läsning (visning och val av foton och videor) och skrivning (spara nya filer i galleriet). Mobila plattformar betraktar mediebiblioteket som konfidentiell data eftersom foton kan innehålla personlig och känslig information.

På Android 13 (API 33) delade Google upp den enda behörigheten READ_EXTERNAL_STORAGE i tre separata: READ_MEDIA_IMAGES för foton, READ_MEDIA_VIDEO för videor och READ_MEDIA_AUDIO för ljud. Detta gör att användaren kan ge åtkomst endast till en specifik typ av mediafiler. På iOS, från och med iOS 14, ger PhotoKit användaren möjlighet att välja specifika foton för åtkomst, istället för att öppna hela biblioteket.

Enligt Counterpoint Research (2024) begär över 70% av mobilapparna inom kategorierna sociala nätverk, kommunikation och fotoredigerare Photo Library Permission. Samtidigt nekar 32% av användarna åtkomst till galleriet om de inte förstår varför appen behöver deras foton. Apple och Google rekommenderar att använda systemets PhotoPicker för att välja enskilda filer utan att begära full åtkomst.

Åtkomst till galleriet på Android

Åtkomst till galleriet på Android förändrades avsevärt med lanseringen av Android 13. Istället för en enda behörighet READ_EXTERNAL_STORAGE har granulära behörigheter för varje mediafiltyp införts, vilket ger användaren mer kontroll.

Behörigheter på Android 13+

Från och med Android 13 används READ_MEDIA_IMAGES för åtkomst till foton och READ_MEDIA_VIDEO för videor. Behörigheten READ_EXTERNAL_STORAGE ger inte längre åtkomst till mediafiler — den finns kvar endast för läsning av icke-mediafiler från delad lagring. Deklarationen i manifestet ser ut så här:

xml
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

Kompatibilitet med Android 12 och äldre

För bakåtkompatibilitet med Android 12 och äldre måste även READ_EXTERNAL_STORAGE deklareras. Android 13 ignorerar dock automatiskt denna behörighet när de nya granulära behörigheterna finns. Använd attributet android:maxSdkVersion="32" i manifestet för den gamla behörigheten för att dölja den på nya versioner. Detta förhindrar onödig begäran på enheter med Android 13+.

xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />

Runtime-begäran i Kotlin

Runtime-begäran för Photo Library Permission på Android utförs via Activity Result API. Exempel på begäran om åtkomst till bilder:

kotlin
private val photoPermissionLauncher =
    registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
    if (granted) {
        loadGalleryImages()
    } else {
        showPermissionDenied()
    }
}

fun pickPhoto() {
    val permission = if (Build.version.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        Manifest.permission.READ_MEDIA_IMAGES
    } else {
        Manifest.permission.READ_EXTERNAL_STORAGE
    }
    if (ContextCompat.checkSelfPermission(this, permission)
        == PackageManager.PERMISSION_GRANTED) {
        loadGalleryImages()
    } else {
        photoPermissionLauncher.launch(permission)
    }
}

Åtkomst till galleriet på iOS

Åtkomst till galleriet på iOS hanteras via PhotoKit-ramverket och nycklarna NSPhotoLibraryUsageDescription och NSPhotoLibraryAddUsageDescription i Info.plist. Från och med iOS 14 kan användaren ge åtkomst endast till valda foton (Limited Photo Library).

Info.plist-konfiguration

För läsning av foton från biblioteket krävs NSPhotoLibraryUsageDescription, för skrivning (spara foton) — NSPhotoLibraryAddUsageDescription. Om appen bara sparar media men inte läser dem räcker den andra nyckeln.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>Appen behöver åtkomst till foton för att välja profilbild och publicera bilder.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Appen behöver åtkomst för att spara bearbetade foton i ditt galleri.</string>

Begäran i Swift

Begäran om åtkomst till foton på iOS utförs via PHPhotoLibrary.requestAuthorization. Från och med iOS 14 anger statusen .limited att användaren har gett åtkomst till en begränsad uppsättning foton.

swift
import PhotosUI

func requestPhotoLibraryAccess() {
    PHPhotoLibrary.requestAuthorization { status in
        DispatchQueue.main.async {
            switch status {
            case .authorized:
                self.loadPhotoLibrary()
            case .limited:
                self.loadSelectedPhotos()
            case .denied, .restricted:
                self.showSettingsAlert()
            case .notDetermined:
                break
            }
        }
    }
}

private func loadPhotoLibrary() {
    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    let assets = PHAsset.fetchAssets(with: .image, options: fetchOptions)
    // Arbeta med förfrågningsresultat
}

Hantering av begränsad åtkomst

Statusen .limited på iOS 14+ innebär att användaren endast har gett åtkomst till några få valda foton. Appen kan begära utökad åtkomst via en systemdialog genom att anropa PHPhotoLibrary.shared().presentLimitedLibraryPicker. Det rekommenderas att visa denna dialog endast när användaren uttryckligen begär en funktion som kräver ytterligare foton.

PhotoPicker vs systembehörighet

PhotoPicker — är en systemkomponent för att välja mediafiler som inte kräver behörighet att få åtkomst till hela biblioteket. Från och med Android 13 och iOS 14 rekommenderar Google och Apple att använda PhotoPicker istället för att begära Photo Library Permission, om appen bara behöver välja ett eller några få foton.

PhotoPicker på Android

På Android 13+ låter den inbyggda PhotoPicker (ActivityResultContracts.PickVisualMedia) användaren välja ett foto eller en video utan att ge åtkomst till hela galleriet. Appen får endast URI för de valda filerna. PhotoPicker fungerar utan att deklarera några behörigheter i manifestet.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI för den valda filen, utan åtkomst till hela biblioteket
        showImage(uri)
    }
}

fun selectPhoto() {
    pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}

PHPicker på iOS

På iOS 14+ introducerades PHPickerViewController — en systemväljare som inte heller kräver åtkomst till hela biblioteket. PHPicker fungerar i en separat process och har inte åtkomst till appens bibliotek. Detta är den föredragna metoden för att välja foton i de flesta scenarier.

swift
import PhotosUI

func presentPhotoPicker() {
    var config = PHPickerConfiguration()
    config.selectionLimit = 1
    config.filter = .images

    let picker = PHPickerViewController(configuration: config)
    picker.delegate = self
    present(picker, animated: true)
}

När full behörighet behövs

PhotoPicker är inte lämpligt om appen behöver åtkomst till hela biblioteket för massoperationer: säkerhetskopiering, synkronisering med molnet, galleriapp, filhanterare. I dessa fall måste Photo Library Permission begäras och fallet med begränsad åtkomst (Limited) hanteras. För iOS är det obligatoriskt att hantera statusen .limited och erbjuda användaren att utöka åtkomsten.

Bästa praxis för galleriåtkomst

Bästa praxis för att arbeta med Photo Library Permission hjälper till att minska antalet avvisningar och uppfylla plattformarnas integritetskrav.

Använd PhotoPicker som standard

För att välja ett eller flera foton, använd systemets PhotoPicker eller PHPicker. Dessa komponenter kräver inga behörigheter och ger bästa användarupplevelse. Begär full åtkomst till galleriet endast om appens funktionalitet kräver åtkomst till hela mediebiblioteket. Google och Apple rekommenderar uttryckligen detta tillvägagångssätt i dokumentationen för utvecklare.

Förklara anledningen till full åtkomst

Om appen verkligen behöver full åtkomst till galleriet, visa en förberedande skärm med en förklaring. Förklara varför alla foton behövs, inte bara ett. Till exempel bör en säkerhetskopieringsapp förklara att den kommer att skanna alla mediafiler för att skapa en kopia. Pre-permission screen är särskilt viktig på iOS på grund av Limited Access-mekanismen.

Begär endast nödvändiga behörigheter

Om appen bara sparar foton men inte läser dem (t.ex. en fotoredigerare som sparar resultatet), begär endast behörighet att skriva till galleriet. På Android är detta WRITE_EXTERNAL_STORAGE (för Android 12 och äldre) eller MediaStore API utan behörighet (för Android 10+). På iOS använder du NSPhotoLibraryAddUsageDescription utan NSPhotoLibraryUsageDescription.

Vanliga frågor

Krävs behörighet för att spara foton på Android 10+?

Från och med Android 10 (API 29) kräver sparande av foton via MediaStore inte behörigheten WRITE_EXTERNAL_STORAGE. Systemet ger åtkomst till delad lagring för skrivning utan uttrycklig behörighet. För att läsa andras filer krävs fortfarande motsvarande behörighet.

Vad är skillnaden mellan READ_EXTERNAL_STORAGE och READ_MEDIA_IMAGES?

READ_EXTERNAL_STORAGE — gammal behörighet för att läsa alla filer från delad lagring (fram till Android 12). READ_MEDIA_IMAGES — ny granulär behörighet för att läsa endast bilder (Android 13+). Användaren kan ge åtkomst endast till foton och neka åtkomst till videor och ljud.

Hur hanterar man statusen .limited på iOS?

Statusen .limited innebär att användaren har valt några foton för åtkomst. Appen kan visa systemdialogrutan för utökning via PHPhotoLibrary.shared().presentLimitedLibraryPicker. Det rekommenderas att visa denna dialog endast på uttrycklig begäran av användaren, till exempel när knappen "Lägg till fler foton" trycks.

Kan man läsa EXIF-metadata från foton?

Ja, med Photo Library Permission kan appen läsa EXIF-data inklusive geotaggar, datum för tagning och kameramodell. På iOS kan ytterligare Location Permission krävas för åtkomst till geotaggar, eftersom Apple betraktar GPS-koordinater som konfidentiell data.

Hur väljer man en video från galleriet utan behörighet?

Använd systemväljaren: PHPicker med filter = .videos på iOS, PickVisualMedia med VideoOnly på Android. På Android kan man även använda Intent(Intent.ACTION_PICK) med MediaStore.Video.Media.EXTERNAL_CONTENT_URI för att välja en video från galleriet, men detta kräver behörigheten READ_EXTERNAL_STORAGE på versioner under Android 13.

Sammanfattning

  • Photo Library Permission — behörighet att läsa och skriva mediafiler, obligatorisk för appar som arbetar med enhetens galleri.
  • Android 13+ använder granulära behörigheter READ_MEDIA_IMAGES och READ_MEDIA_VIDEO istället för den enda READ_EXTERNAL_STORAGE.
  • iOS 14+ låter användaren ge åtkomst endast till valda foton (Limited) via PhotoKit.
  • PhotoPicker — rekommenderad metod för att välja enskilda filer utan att begära full åtkomst till biblioteket.
  • Skrivning till galleriet på Android 10+ kräver inte behörighet via MediaStore, på iOS kräver NSPhotoLibraryAddUsageDescription.
  • Pre-permission screen med förklaring av syftet med fotosamlingen ökar godkännandegraden och minskar antalet avvisningar.
  • Limited Access på iOS kräver ytterligare hantering och möjlighet att begära utökad åtkomst via systemdialogrutan.

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å