Microphone Permission — är en systembehörighet som appen behöver för att få åtkomst till enhetens mikrofon. Det krävs för ljudinspelning, röstmeddelanden, videosamtal och taligenkänning. Enligt Apple Developer Documentation, 2024, är alla appar som använder ljudinspelning skyldiga att begära uttryckligt samtycke från användaren via en systemdialogruta.
Huvudpunkter
Microphone Permission är en integritetsskyddsmekanism som förhindrar obehörig ljudinspelning från enhetens mikrofon. Mobila plattformar klassificerar mikrofonen som en av de mest känsliga resurserna, eftersom ljudinspelning kan fånga privata samtal, omgivningen och konfidentiell information.
Android klassificerar RECORD_AUDIO som en farlig behörighet och iOS kräver obligatorisk tilläggning av nyckeln NSMicrophoneUsageDescription i Info.plist. På båda plattformarna utförs begäran vid körning och användaren kan när som helst återkalla behörigheten via systeminställningarna. Systemindikatorn för inspelning (orange prick på iOS, grön indikator på Android 12+) signalerar till användaren att appen för tillfället använder mikrofonen.
Enligt forskning från Pew Research Center (2024) har 54% av mobilanvändarna minst en gång nekat en app åtkomst till mikrofonen. Den främsta orsaken är att man inte förstår varför appen behöver ljudinspelning. Därför måste utvecklaren förklara syftet med mikrofonanvändningen så transparent som möjligt.
Mikrofonbehörighet på Android begärs genom att deklarera RECORD_AUDIO i manifestet och göra en begäran vid körning i appens kod. Från och med Android 10 regleras åtkomsten till mikrofonen ytterligare av begränsningar för bakgrundsappar.
Första steget är att deklarera behörigheten RECORD_AUDIO i manifestfilen. Utan denna deklaration kommer begäran vid körning inte att ha någon effekt och appen kommer inte att få åtkomst till mikrofonen.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT är en systembehörighet som inte är tillgänglig för tredjepartsappar. Den används endast av systemappar för att fånga ljudutgång. Vanliga appar behöver bara RECORD_AUDIO för inspelning från mikrofonen.
Efter deklaration i manifestet måste begäran vid körning utföras. Låt oss titta på ett exempel på hur man använder AudioRecord för att spela in ljud från mikrofonen.
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()
// Spela in ljuddata till buffert
}
Det är viktigt att hantera livscykeln för ljudinspelning korrekt. När appen växlar till bakgrundsläge på Android 9 och nyare kan inspelningen från mikrofonen pausas av systemet. Från och med Android 10 är bakgrundsåtkomst till mikrofonen ytterligare begränsad: en app i bakgrunden kan inte påbörja inspelning och aktiv inspelning pausas. För inspelning i bakgrunden krävs MediaProjection eller en Service med notifiering.
Mikrofonbehörighet på iOS konfigureras via nyckeln NSMicrophoneUsageDescription i Info.plist och anrop av metoden AVAudioSession.requestRecordPermission. Apple kräver obligatorisk angivelse av orsaken till mikrofonanvändning i begärandialogrutan.
Nyckeln NSMicrophoneUsageDescription är obligatorisk för alla appar som begär åtkomst till mikrofonen. Utan den kommer appen att krångla vid försök att spela in ljud.
<key>NSMicrophoneUsageDescription</key>
<string>Appen behöver åtkomst till mikrofonen för att spela in röstanteckningar och skicka ljudmeddelanden.</string>
Begäran om åtkomst till mikrofonen på iOS utförs via AVAudioSession. Efter att ha fått svar konfigurerar appen ljudsessionen och påbörjar inspelningen.
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)")
}
}
På iOS 14 och nyare visar en app som använder mikrofonen en orange indikator i statusfältet. Användaren ser vilken app som för tillfället spelar in ljud. Om appen använder mikrofonen i bakgrunden utan giltig anledning kan Apple avvisa uppdateringen. AVAudioSession gör det möjligt att konfigurera kategori och läge för ljudsessionen, vilket bestämmer appens beteende när den växlar till bakgrundsläge.
Användningsscenarier för mikrofonen i mobilappar är varierande: från enkel röstinspelning till komplex realtidsbearbetning av ljudströmmar.
Meddelandetjänster och anteckningsappar använder mikrofonen för att spela in röstmeddelanden. I detta fall begärs Microphone Permission när inspelningsknappen trycks in. Efter inspelningens slut är det viktigt att stoppa ljudsessionen så att andra appar kan använda mikrofonen. AVAudioSession på iOS och AudioManager på Android hanterar ljudfokus.
Appar med röstinmatning (sökning, diktamen, röstassistenter) använder mikrofonen i kombination med taligenkännings-API:er. På Android är detta SpeechRecognizer från android.speech, på iOS — SFSpeechRecognizer från Speech framework. För taligenkänning kan ytterligare behörighet för åtkomst till igenkänningstjänster krävas (SPEECH på Android, SFSpeechRecognizer.requestAuthorization på iOS).
Appar för videosamtal (WebRTC, Zoom, Telegram) begär Microphone Permission samtidigt som Camera Permission. I detta sammanhang är det viktigt att begära båda behörigheterna sekventiellt, inte samtidigt, för att inte överbelasta användaren med dialogrutor. WebRTC använder getUserMedia för att fånga ljud och video, men på mobila plattformar krävs först systembehörigheter.
För högkvalitativ inspelning krävs korrekt konfiguration av ljudsessionens parametrar. På iOS möjliggör kategorin .playAndRecord samtidig uppspelning och inspelning av ljud. På Android säkerställer valet AudioSource.MIC inspelning från huvudmikrofonen och AudioSource.VOICE_COMMUNICATION optimerar inspelningen för röstkommunikation. Dessutom kan samplingsfrekvensen 44100 Hz och PCM 16-bitars format konfigureras för att uppnå standard CD-kvalitet.
Under ljudinspelning kan systemavbrott inträffa: inkommande samtal, väckarklocka, notifiering från en annan app. På iOS hanterar AVAudioSessionDelegate beginInterruption och endInterruption. På Android informerar AudioManager.OnAudioFocusChangeListener appen om förlust eller återkomst av ljudfokus. Korrekt hantering av avbrott gör det möjligt att bevara inspelningen vid oväntade händelser och förhindra dataförlust. Det rekommenderas att pausa inspelningen vid fokusförlust och återuppta efter återkomst med meddelande till användaren.
Optimering av ljudinspelning omfattar konfiguration av samplingsfrekvens, buffertstorlek och kodningsformat. För röstmeddelanden räcker frekvensen 44100 Hz och monokanal. För taligenkänning kan frekvensen 16000 Hz krävas.
På iOS använder du AVAudioSession.setPreferredIOBufferDuration för att konfigurera inspelningsfördröjning. En mindre buffert minskar fördröjningen men ökar CPU-belastningen. På Android returnerar AudioRecord.getMinBufferSize den minsta buffertstorleken för angivna parametrar. Det rekommenderas att använda en buffert som inte är mindre än detta minimum för att förhindra dataförlust under inspelning vid hög systembelastning.
Bästa praxis för att arbeta med Microphone Permission syftar till att öka användarens förtroende och efterlevnad av plattformskraven.
Innan du begär Microphone Permission, visa en skärm som förklarar varför appen behöver mikrofonen och hur inspelningen kommer att användas. Ange om ljudet skickas till servern eller bearbetas lokalt. Användare är mycket mer benägna att godkänna åtkomst om de förstår att inspelningen inte lämnar enheten. Lokal bearbetning (on-device ASR) är ett starkt argument för förtroende.
Om appen inte kräver bakgrundsinspelning av ljud, stoppa mikrofonen när du växlar till bakgrundsläge. Detta sparar inte bara batteri utan förhindrar också negativa reaktioner från användaren som ser inspelningsindikatorn. På iOS använder du UIApplicationDelegate-metoderna applicationDidEnterBackground för att pausa inspelningen. På Android hanterar du onPause och onStop i Activity eller Service.
Visa din egen inspelningsindikator (animerad mikrofonikon eller våg) under ljudinspelning. Detta informerar användaren om att mikrofonen är aktiv och minskar risken för negativa reaktioner. Apple och Google rekommenderar att du duplicerar systemindikatorn med ditt eget UI-element för maximal transparens.
Vanliga frågor
Nej, mikrofonbehörighet krävs endast för infångning av ljud från mikrofonen. Uppspelning av ljud genom högtalare eller hörlurar kräver inte Microphone Permission. För uppspelning räcker det att konfigurera ljudsessionen på iOS eller AudioTrack på Android.
Använd ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Metoden returnerar PackageManager.PERMISSION_GRANTED eller PERMISSION_DENIED. Kontrollera dessutom om mikrofonen är tillgänglig på enheten via PackageManager.hasSystemFeature.
Föreslå ett alternativt scenario: textinmatning istället för röst, skicka meddelande utan ljud, titta på video utan ljud. Om röstfunktionen är kritisk, visa en skärm med instruktioner för att aktivera behörigheten i systeminställningarna och en navigeringsknapp.
Från och med Android 12 kan en app i bakgrunden inte få åtkomst till mikrofonen. Aktiv inspelning pausas när du växlar till bakgrundsläge. Dessutom har indikatorn Privacy Chip dykt upp — en grön ikon i statusfältet som visar att appen använder mikrofonen.
De vanligaste orsakerna: saknad av nyckeln NSMicrophoneUsageDescription, ospecifik beskrivning av orsaken (“för att förbättra tjänsten” istället för “för att spela in röstmeddelanden”), begäran om behörighet utan tydlig användaråtgärd eller användning av mikrofonen i bakgrunden utan berättigad funktionalitet.
Sammanfattning
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.
Läs också