Microphone Permission — dit is een systeemtoestemming die een app nodig heeft om toegang te krijgen tot de microfoon van het apparaat. Het is vereist voor het opnemen van audio, spraakberichten, videogesprekken en spraakherkenning. Volgens Apple Developer Documentation, 2024 zijn alle apps die audiocapture gebruiken verplicht om expliciete toestemming van de gebruiker te vragen via een systeemdialoogvenster.
Belangrijkste punten
Microphone Permission is een privacybeschermingsmechanisme dat ongeautoriseerde audio-opname van de microfoon van het apparaat voorkomt. Mobiele platforms classificeren de microfoon als een van de meest gevoelige bronnen, omdat geluidsopname privégesprekken, de omgeving en vertrouwelijke informatie kan vastleggen.
Android classificeert RECORD_AUDIO als een gevaarlijke toestemming en iOS vereist het verplicht toevoegen van de sleutel NSMicrophoneUsageDescription in Info.plist. Op beide platforms wordt het verzoek uitgevoerd tijdens runtime en kan de gebruiker op elk moment de toestemming intrekken via de systeeminstellingen. De systeemindicator voor opname (oranje stip op iOS, groene indicator op Android 12+) geeft de gebruiker aan dat de app op dat moment de microfoon gebruikt.
Volgens een onderzoek van Pew Research Center (2024) heeft 54% van de mobiele gebruikers minstens één keer de toegang tot de microfoon aan een app geweigerd. De belangrijkste reden is het niet begrijpen waarom de app audio-opname nodig heeft. Daarom moet de ontwikkelaar het doel van het gebruik van de microfoon zo transparant mogelijk uitleggen.
Microfoontoestemming op Android wordt aangevraagd door RECORD_AUDIO in het manifest te declareren en een runtime-verzoek in de app-code uit te voeren. Vanaf Android 10 wordt de toegang tot de microfoon aanvullend gereguleerd door beperkingen voor achtergrond-apps.
De eerste stap is het declareren van de RECORD_AUDIO-toestemming in het manifestbestand. Zonder deze declaratie heeft het runtime-verzoek geen effect en krijgt de app geen toegang tot de microfoon.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT is een systeemtoestemming die niet beschikbaar is voor apps van derden. Het wordt alleen gebruikt door systeem-apps voor het vastleggen van audio-uitvoer. Gewone apps hebben alleen RECORD_AUDIO nodig voor opname van de microfoon.
Na declaratie in het manifest moet het runtime-verzoek worden uitgevoerd. Laten we een voorbeeld bekijken van het gebruik van AudioRecord voor het opnemen van audio van de microfoon.
private val recordAudioPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
startRecording()
} else {
showMicrophoneExplanation()
}
}
fun startRecording() {
val sampleRate = 44100
val bufferSize = AudioRecord.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT)
val recorder = AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize)
recorder.startRecording()
// Audiogegevens naar buffer schrijven
}
Het is belangrijk om de levenscyclus van audio-opname correct af te handelen. Wanneer de app overschakelt naar de achtergrondmodus op Android 9 en hoger, kan de opname van de microfoon door het systeem worden onderbroken. Vanaf Android 10 is achtergrondtoegang tot de microfoon verder beperkt: een app op de achtergrond kan geen opname starten en actieve opname wordt onderbroken. Voor achtergrondopname is MediaProjection of een Service met melding vereist.
Microfoontoestemming op iOS wordt geconfigureerd via de sleutel NSMicrophoneUsageDescription in Info.plist en het aanroepen van de methode AVAudioSession.requestRecordPermission. Apple vereist het verplicht vermelden van de reden voor microfoongebruik in het aanvraagdialoogvenster.
De sleutel NSMicrophoneUsageDescription is verplicht voor elke app die toegang tot de microfoon aanvraagt. Zonder deze sleutel zal de app crashen bij een poging tot audio-opname.
<key>NSMicrophoneUsageDescription</key>
<string>De app heeft toegang tot de microfoon nodig voor het opnemen van spraaknotities en het verzenden van audiobestanden.</string>
Het verzoek om toegang tot de microfoon op iOS wordt uitgevoerd via AVAudioSession. Nadat het antwoord is ontvangen, configureert de app de audiosessie en start de opname.
import AVFAudio
func requestMicrophoneAccess() {
AVAudioSession.sharedInstance().requestRecordPermission { granted in
DispatchQueue.main.async {
if granted {
self.configureAudioSession()
self.startAudioRecording()
} else {
self.redirectToSettings()
}
}
}
}
private func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(.playAndRecord, mode: .default)
try session.setActive(true)
} catch {
print("Audio session error: \(error)")
}
}
Op iOS 14 en hoger toont een app die de microfoon gebruikt een oranje indicator in de statusbalk. De gebruiker ziet welke app op dat moment audio opneemt. Als de app zonder geldige reden op de achtergrond de microfoon gebruikt, kan Apple de update afwijzen. AVAudioSession maakt het mogelijk om de categorie en modus van de audiosessie te configureren, waarmee het gedrag van de app bij het overschakelen naar de achtergrondmodus wordt bepaald.
Gebruiksscenario’s van de microfoon in mobiele apps zijn divers: van eenvoudige spraakopname tot complexe real-time verwerking van audiostromen.
Messengers en notitie-apps gebruiken de microfoon voor het opnemen van spraakberichten. In dit geval wordt Microphone Permission aangevraagd wanneer op de opnameknop wordt gedrukt. Na het beëindigen van de opname is het belangrijk om de audiosessie te stoppen, zodat andere apps de microfoon kunnen gebruiken. AVAudioSession op iOS en AudioManager op Android beheren de audiofocus.
Apps met spraakinvoer (zoeken, dicteren, spraakassistenten) gebruiken de microfoon in combinatie met spraakherkennings-API’s. Op Android is dit SpeechRecognizer uit android.speech, op iOS — SFSpeechRecognizer uit het Speech framework. Voor spraakherkenning kan extra toestemming voor toegang tot herkenningsdiensten nodig zijn (SPEECH op Android, SFSpeechRecognizer.requestAuthorization op iOS).
Apps voor videogesprekken (WebRTC, Zoom, Telegram) vragen Microphone Permission tegelijkertijd met Camera Permission aan. In deze context is het belangrijk om beide toestemmingen opeenvolgend aan te vragen, niet tegelijkertijd, om de gebruiker niet te overladen met dialoogvensters. WebRTC gebruikt getUserMedia voor het vastleggen van audio en video, maar op mobiele platforms zijn eerst systeemtoestemmingen vereist.
Voor hoogwaardige opname is het correct configureren van de audiosessieparameters vereist. Op iOS maakt de categorie .playAndRecord gelijktijdig afspelen en opnemen van geluid mogelijk. Op Android zorgt de keuze AudioSource.MIC voor capture van de hoofdmicrofoon en optimaliseert AudioSource.VOICE_COMMUNICATION de opname voor spraakcommunicatie. Aanvullend kan de bemonsteringsfrequentie 44100 Hz en PCM 16-bits formaat worden geconfigureerd om standaard CD-kwaliteit te bereiken.
Tijdens audio-opname kunnen systeemonderbrekingen optreden: inkomend gesprek, alarm, melding van een andere app. Op iOS handelt AVAudioSessionDelegate beginInterruption en endInterruption af. Op Android informeert AudioManager.OnAudioFocusChangeListener de app over verlies of terugkeer van audiofocus. Correcte afhandeling van onderbrekingen maakt het mogelijk om de opname te behouden bij onverwachte gebeurtenissen en gegevensverlies te voorkomen. Het wordt aanbevolen om de opname te pauzeren bij focusverlies en te hervatten na terugkeer met melding aan de gebruiker.
Optimalisatie van audiocapture omvat het configureren van de bemonsteringsfrequentie, buffergrootte en coderingsformaat. Voor spraakberichten is een frequentie van 44100 Hz en een monokanaal voldoende. Voor spraakherkenning kan een frequentie van 16000 Hz nodig zijn.
Op iOS gebruikt u AVAudioSession.setPreferredIOBufferDuration voor het configureren van de opnamevertraging. Een kleinere buffer vermindert de vertraging, maar verhoogt de CPU-belasting. Op Android retourneert AudioRecord.getMinBufferSize de minimale buffergrootte voor de opgegeven parameters. Het wordt aanbevolen om een buffer te gebruiken die niet kleiner is dan dit minimum om gegevensverlies tijdens opname onder hoge systeembelasting te voorkomen.
Beste praktijken voor werken met Microphone Permission zijn gericht op het vergroten van het gebruikersvertrouwen en naleving van platformvereisten.
Voordat u Microphone Permission aanvraagt, toon een scherm waarop u uitlegt waarom de app de microfoon nodig heeft en hoe de opname wordt gebruikt. Geef aan of de audio naar de server wordt verzonden of lokaal wordt verwerkt. Gebruikers geven veel vaker toestemming als ze begrijpen dat de opname het apparaat niet verlaat. Lokale verwerking (on-device ASR) is een sterk argument voor vertrouwen.
Als de app geen achtergrondaudio-opname vereist, stop dan de microfoon bij het overschakelen naar de achtergrondmodus. Dit bespaart niet alleen batterij, maar voorkomt ook negatieve reacties van de gebruiker die de opname-indicator ziet. Op iOS gebruikt u de UIApplicationDelegate-methoden applicationDidEnterBackground om de opname te pauzeren. Op Android handelt u onPause en onStop af in Activity of Service.
Toon uw eigen opname-indicator (geanimeerd microfoonpictogram of golf) tijdens audiocapture. Dit informeert de gebruiker dat de microfoon actief is en vermindert het risico op negatieve reacties. Apple en Google raden aan om de systeemindicator te dupliceren met uw eigen UI-element voor maximale transparantie.
Veelgestelde vragen
Nee, microfoontoestemming is alleen nodig voor het vastleggen van audio van de microfoon. Het afspelen van geluid via de luidspreker of koptelefoon vereist geen Microphone Permission. Voor afspelen is het voldoende om de audiosessie op iOS of AudioTrack op Android te configureren.
Gebruik ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). De methode retourneert PackageManager.PERMISSION_GRANTED of PERMISSION_DENIED. Controleer aanvullend of de microfoon beschikbaar is op het apparaat via PackageManager.hasSystemFeature.
Bied een alternatief scenario aan: tekstinvoer in plaats van spraak, bericht verzenden zonder audio, video bekijken zonder geluid. Als de spraakfunctie kritiek is, toon dan een scherm met instructies voor het inschakelen van de toestemming in de systeeminstellingen en een navigatieknop.
Vanaf Android 12 kan een app op de achtergrond geen toegang krijgen tot de microfoon. Actieve opname wordt onderbroken bij het overschakelen naar de achtergrondmodus. Daarnaast is de Privacy Chip-indicator verschenen — een groen pictogram in de statusbalk dat aangeeft dat de app de microfoon gebruikt.
De meest voorkomende redenen: ontbreken van de sleutel NSMicrophoneUsageDescription, niet-specifieke redenbeschrijving („voor het verbeteren van de dienst“ in plaats van „voor het opnemen van spraakberichten“), aanvragen van toestemming zonder duidelijke gebruikersactie of gebruik van de microfoon op de achtergrond zonder gerechtvaardigde functionaliteit.
Samenvatting
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.
Lees ook