Photo Library Permission — basis, toegangstypes en werkingsprincipe

Auteur: IT Sectr Gepubliceerd: 2026-05-21 Leestijd: 8 min

Photo Library Permission — is de toestemming die een app nodig heeft om toegang te krijgen tot foto's en video's op het apparaat van de gebruiker. Het is vereist voor het selecteren van afbeeldingen uit de galerij, het opslaan van mediabestanden en het beheren van fotoalbums. Volgens Apple Developer Documentation, 2024 moeten apps vanaf iOS 14 toegang vragen tot een beperkte bibliotheek, niet tot alle foto's tegelijk.

Belangrijkste punten

  • Photo Library Permission — toestemming voor het lezen en schrijven van mediabestanden in de galerij van het apparaat, verplicht voor het werken met foto's en video's.
  • Android gebruikt READ_MEDIA_IMAGES, READ_MEDIA_VIDEO (Android 13+) of READ_EXTERNAL_STORAGE voor toegang tot de galerij.
  • iOS gebruikt PHPhotoLibrary met beperkte toegang (Limited Photo Library Access) vanaf iOS 14.
  • Selectie van afzonderlijke foto's via de systeempicker (PhotoPicker) heeft geen toestemming nodig voor toegang tot de volledige bibliotheek.
  • Schrijven naar de galerij vereist een aparte schrijftoestemming (WRITE_EXTERNAL_STORAGE op Android, PHPhotoLibrary op iOS).

Basis van Photo Library Permission

Photo Library Permission — is de systeemtoestemming die de toegang van een app tot mediabestanden op het apparaat regelt. Het omvat zowel lezen (bekijken en selecteren van foto's en video's) als schrijven (opslaan van nieuwe bestanden in de galerij). Mobiele platforms beschouwen de mediabibliotheek als vertrouwelijke gegevens, omdat foto's persoonlijke en gevoelige informatie kunnen bevatten.

Op Android 13 (API 33) heeft Google de enkele toestemming READ_EXTERNAL_STORAGE opgesplitst in drie aparte: READ_MEDIA_IMAGES voor foto's, READ_MEDIA_VIDEO voor video's en READ_MEDIA_AUDIO voor audio. Hiermee kan de gebruiker alleen toegang geven tot een specifiek type mediabestanden. Op iOS biedt PhotoKit vanaf iOS 14 de gebruiker de mogelijkheid om specifieke foto's te selecteren voor toegang, in plaats van de hele bibliotheek open te stellen.

Volgens Counterpoint Research (2024) vraagt meer dan 70% van de mobiele apps in de categorieën sociale media, communicatie en fotobewerkers om Photo Library Permission. Tegelijkertijd weigert 32% van de gebruikers toegang tot de galerij als ze niet begrijpen waarom de app hun foto's nodig heeft. Apple en Google raden aan om de systeem-PhotoPicker te gebruiken voor het selecteren van afzonderlijke bestanden zonder volledige toegang te vragen.

Toegang tot de galerij op Android

Toegang tot de galerij op Android is aanzienlijk veranderd met de komst van Android 13. In plaats van één READ_EXTERNAL_STORAGE-toestemming zijn er granulaire toestemmingen voor elk type mediabestand gekomen, wat de gebruiker meer controle geeft.

Toestemmingen op Android 13+

Vanaf Android 13 wordt READ_MEDIA_IMAGES gebruikt voor toegang tot foto's en READ_MEDIA_VIDEO voor video's. De toestemming READ_EXTERNAL_STORAGE biedt geen toegang meer tot mediabestanden — deze is alleen behouden voor het lezen van niet-media bestanden uit de gedeelde opslag. De declaratie in het manifest ziet er als volgt uit:

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

Compatibiliteit met Android 12 en lager

Voor achterwaartse compatibiliteit met Android 12 en lager moet ook READ_EXTERNAL_STORAGE worden gedeclareerd. Android 13 negeert deze toestemming echter automatisch wanneer de nieuwe granulaire toestemmingen aanwezig zijn. Gebruik het attribuut android:maxSdkVersion="32" in het manifest voor de oude toestemming om deze te verbergen op nieuwe versies. Dit voorkomt een overbodige aanvraag op apparaten met Android 13+.

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

Runtime-aanvraag in Kotlin

De runtime-aanvraag voor Photo Library Permission op Android wordt uitgevoerd via de Activity Result API. Voorbeeld voor het aanvragen van toegang tot afbeeldingen:

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)
    }
}

Toegang tot de galerij op iOS

Toegang tot de galerij op iOS wordt beheerd via het PhotoKit-framework en de sleutels NSPhotoLibraryUsageDescription en NSPhotoLibraryAddUsageDescription in Info.plist. Vanaf iOS 14 kan de gebruiker alleen toegang geven tot geselecteerde foto's (Limited Photo Library).

Info.plist-configuratie

Voor het lezen van foto's uit de bibliotheek is NSPhotoLibraryUsageDescription vereist, voor schrijven (foto's opslaan) — NSPhotoLibraryAddUsageDescription. Als de app alleen media opslaat maar niet leest, is de tweede sleutel voldoende.

xml
<key>NSPhotoLibraryUsageDescription</key>
<string>De app heeft toegang tot foto's nodig om een profielfoto te selecteren en afbeeldingen te publiceren.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>De app heeft toegang nodig om bewerkte foto's op te slaan in uw galerij.</string>

Aanvraag in Swift

De toegangsaanvraag voor foto's op iOS wordt uitgevoerd via PHPhotoLibrary.requestAuthorization. Vanaf iOS 14 geeft de status .limited aan dat de gebruiker toegang heeft verleend tot een beperkte set foto's.

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)
    // Werken met aanvraagresultaten
}

Omgaan met beperkte toegang

De status .limited op iOS 14+ betekent dat de gebruiker alleen toegang heeft gegeven tot enkele geselecteerde foto's. De app kan uitbreiding van toegang aanvragen via een systeemdialoog door PHPhotoLibrary.shared().presentLimitedLibraryPicker aan te roepen. Het wordt aanbevolen deze dialoog alleen te tonen wanneer de gebruiker expliciet een functie aanvraagt waarvoor extra foto's nodig zijn.

PhotoPicker vs systeemtoestemming

PhotoPicker — is een systeemcomponent voor het selecteren van mediabestanden die geen toestemming vereist voor toegang tot de volledige bibliotheek. Vanaf Android 13 en iOS 14 raden Google en Apple aan om PhotoPicker te gebruiken in plaats van Photo Library Permission aan te vragen, als de app slechts één of enkele foto's hoeft te selecteren.

PhotoPicker op Android

Op Android 13+ stelt de ingebouwde PhotoPicker (ActivityResultContracts.PickVisualMedia) de gebruiker in staat een foto of video te selecteren zonder toegang tot de volledige galerij te verlenen. De app ontvangt alleen de URI van de geselecteerde bestanden. PhotoPicker werkt zonder enige toestemming in het manifest te declareren.

kotlin
private val pickMedia =
    registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
    if (uri != null) {
        // URI van het geselecteerde bestand, zonder toegang tot de volledige bibliotheek
        showImage(uri)
    }
}

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

PHPicker op iOS

Op iOS 14+ is PHPickerViewController geïntroduceerd — een systeempicker die ook geen toegang tot de volledige bibliotheek vereist. PHPicker werkt in een apart proces en heeft geen toegang tot de bibliotheek van de app. Dit is de voorkeursmethode voor het selecteren van foto's in de meeste scenario's.

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)
}

Wanneer volledige toestemming nodig is

PhotoPicker is niet geschikt als de app toegang tot de volledige bibliotheek nodig heeft voor massa-operaties: back-up, synchronisatie met de cloud, galerij-app, bestandsbeheer. In deze gevallen moet Photo Library Permission worden aangevraagd en moet het geval van beperkte toegang (Limited) worden afgehandeld. Voor iOS is het verplicht om de status .limited te verwerken en de gebruiker de mogelijkheid te bieden de toegang uit te breiden.

Beste praktijken voor galerijtoegang

Beste praktijken voor het werken met Photo Library Permission helpen het aantal weigeringen te verminderen en te voldoen aan de privacyvereisten van de platforms.

Gebruik standaard PhotoPicker

Gebruik voor het selecteren van een of meerdere foto's de systeem-PhotoPicker of PHPicker. Deze componenten hebben geen toestemming nodig en bieden de beste gebruikerservaring. Vraag alleen volledige toegang tot de galerij aan als de functionaliteit van de app toegang tot de volledige mediabibliotheek vereist. Google en Apple raden deze aanpak expliciet aan in de documentatie voor ontwikkelaars.

Leg de reden van volledige toegang uit

Als de app echt volledige toegang tot de galerij nodig heeft, toon dan een voorafgaand scherm met uitleg. Leg uit waarom alle foto's nodig zijn, niet slechts één. Een back-up-app moet bijvoorbeeld uitleggen dat het alle mediabestanden scant om een kopie te maken. Pre-permission screen is vooral belangrijk op iOS vanwege het Limited Access-mechanisme.

Vraag alleen noodzakelijke toestemmingen

Als de app alleen foto's opslaat maar niet leest (bijv. een fotobewerker die het resultaat opslaat), vraag dan alleen toestemming voor schrijven naar de galerij. Op Android is dit WRITE_EXTERNAL_STORAGE (voor Android 12 en lager) of MediaStore API zonder toestemming (voor Android 10+). Op iOS gebruik je NSPhotoLibraryAddUsageDescription zonder NSPhotoLibraryUsageDescription.

Veelgestelde vragen

Is er toestemming nodig voor het opslaan van foto's op Android 10+?

Vanaf Android 10 (API 29) vereist het opslaan van foto's via MediaStore geen toestemming WRITE_EXTERNAL_STORAGE. Het systeem biedt toegang tot de gedeelde opslag voor schrijven zonder expliciete toestemming. Voor het lezen van andermans bestanden is nog steeds de juiste toestemming vereist.

Wat is het verschil tussen READ_EXTERNAL_STORAGE en READ_MEDIA_IMAGES?

READ_EXTERNAL_STORAGE — de oude toestemming voor het lezen van alle bestanden uit de gedeelde opslag (tot Android 12). READ_MEDIA_IMAGES — de nieuwe granulaire toestemming voor het lezen van alleen afbeeldingen (Android 13+). De gebruiker kan alleen toegang geven tot foto's en toegang tot video's en audio weigeren.

Hoe ga ik om met de status .limited op iOS?

De status .limited betekent dat de gebruiker enkele foto's heeft geselecteerd voor toegang. De app kan de systeemdialoog voor uitbreiding tonen via PHPhotoLibrary.shared().presentLimitedLibraryPicker. Het wordt aanbevolen deze dialoog alleen te tonen op expliciet verzoek van de gebruiker, bijvoorbeeld bij het klikken op de knop 'Voeg meer foto's toe'.

Kan ik EXIF-metadata uit foto's lezen?

Ja, met Photo Library Permission kan de app EXIF-gegevens lezen, inclusief geotags, opnamedatum en cameramodel. Op iOS kan voor toegang tot geotags aanvullende Location Permission nodig zijn, omdat Apple GPS-coördinaten als vertrouwelijke gegevens beschouwt.

Hoe selecteer ik een video uit de galerij zonder toestemming?

Gebruik de systeempicker: PHPicker met filter = .videos op iOS, PickVisualMedia met VideoOnly op Android. Op Android kan voor het selecteren van een video uit de galerij ook Intent(Intent.ACTION_PICK) met MediaStore.Video.Media.EXTERNAL_CONTENT_URI worden gebruikt, maar dit vereist toestemming READ_EXTERNAL_STORAGE op versies onder Android 13.

Samenvatting

  • Photo Library Permission — toestemming voor het lezen en schrijven van mediabestanden, verplicht voor apps die met de apparaatgalerij werken.
  • Android 13+ gebruikt granulaire toestemmingen READ_MEDIA_IMAGES en READ_MEDIA_VIDEO in plaats van de enkele READ_EXTERNAL_STORAGE.
  • iOS 14+ stelt de gebruiker in staat alleen toegang te geven tot geselecteerde foto's (Limited) via PhotoKit.
  • PhotoPicker — de aanbevolen methode voor het selecteren van afzonderlijke bestanden zonder volledige toegang tot de bibliotheek aan te vragen.
  • Schrijven naar de galerij op Android 10+ vereist geen toestemming via MediaStore, op iOS vereist het NSPhotoLibraryAddUsageDescription.
  • Pre-permission screen met uitleg over het doel van het verzamelen van foto's verhoogt het goedkeuringspercentage en vermindert het aantal weigeringen.
  • Limited Access op iOS vereist extra afhandeling en de mogelijkheid om uitbreiding van toegang aan te vragen via de systeemdialoog.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook