Microphone Permission este o permisiune de sistem necesară aplicației pentru a accesa microfonul dispozitivului. Este necesară pentru înregistrarea audio, mesaje vocale, apeluri video și recunoaștere vocală. Conform Apple Developer Documentation, 2024, toate aplicațiile care utilizează captura audio sunt obligate să solicite consimțământul explicit al utilizatorului printr-un dialog de sistem.
Principalele
Microphone Permission este un mecanism de protecție a confidențialității care previne înregistrarea neautorizată a audio de la microfonul dispozitivului. Platformele mobile consideră microfonul una dintre cele mai sensibile resurse, deoarece înregistrarea sunetului poate capta conversații personale, mediul înconjurător și informații confidențiale.
Android clasifică RECORD_AUDIO ca permisiune periculoasă, iar iOS necesită adăugarea obligatorie a cheii NSMicrophoneUsageDescription în Info.plist. Pe ambele platforme, solicitarea se execută la runtime, iar utilizatorul poate oricând revoca permisiunea prin setările sistemului. Indicatorul de sistem al înregistrării (punct portocaliu pe iOS, indicator verde pe Android 12+) semnalează utilizatorului că aplicația folosește microfonul în acel moment.
Conform studiului Pew Research Center (2024), 54% dintre utilizatorii de dispozitive mobile au refuzat cel puțin o dată accesul la microfon unei aplicații. Motivul principal — neînțelegerea scopului pentru care aplicația are nevoie de înregistrare audio. Prin urmare, dezvoltatorul trebuie să explice cât mai transparent scopul utilizării microfonului.
Permisiunea microfonului pe Android se solicită prin declararea RECORD_AUDIO în manifest și solicitarea la runtime în codul aplicației. Începând cu Android 10, accesul la microfon este suplimentar reglementat de restricții pentru aplicațiile de fundal.
Primul pas este declararea permisiunii RECORD_AUDIO în fișierul manifest. Fără această declarație, solicitarea la runtime nu va avea efect, iar aplicația nu va putea accesa microfonul.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT este o permisiune de sistem indisponibilă aplicațiilor terțe. Este folosită doar de aplicațiile de sistem pentru capturarea ieșirii audio. Aplicațiile obișnuite au nevoie doar de RECORD_AUDIO pentru înregistrarea de la microfon.
După declararea în manifest, trebuie executată solicitarea la runtime. Să analizăm un exemplu de utilizare a AudioRecord pentru înregistrarea audio de la microfon.
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()
// Înregistrarea datelor audio în buffer
}
Este important să gestionați corect ciclul de viață al înregistrării audio. Când aplicația trece în modul fundal pe Android 9 și versiuni ulterioare, înregistrarea de la microfon poate fi suspendată de sistem. Începând cu Android 10, accesul la microfon în fundal este suplimentar restricționat: aplicația în fundal nu poate începe înregistrarea, iar înregistrarea activă este suspendată. Pentru înregistrarea în fundal este necesar MediaProjection sau un Service cu notificare.
Permisiunea microfonului pe iOS se configurează prin cheia NSMicrophoneUsageDescription în Info.plist și apelul metodei AVAudioSession.requestRecordPermission. Apple solicită indicarea obligatorie a motivului utilizării microfonului în dialogul de solicitare.
Cheia NSMicrophoneUsageDescription este obligatorie pentru orice aplicație care solicită acces la microfon. Fără ea, aplicația se va bloca la încercarea de înregistrare audio.
<key>NSMicrophoneUsageDescription</key>
<string>Aplicaţia are nevoie de acces la microfon pentru înregistrarea notiţelor vocale şi trimiterea mesajelor audio.</string>
Solicitarea accesului la microfon pe iOS se execută prin AVAudioSession. După primirea răspunsului, aplicația configurează sesiunea audio și începe înregistrarea.
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)")
}
}
Pe iOS 14 și versiuni ulterioare, aplicația care folosește microfonul afișează un indicator portocaliu în bara de stare. Utilizatorul vede ce aplicație înregistrează audio în acel moment. Dacă aplicația folosește microfonul în fundal fără un motiv întemeiat, Apple poate respinge actualizarea. AVAudioSession permite configurarea categoriei și modului sesiunii audio, determinând comportamentul aplicației la trecerea în modul fundal.
Scenariile de utilizare a microfonului în aplicațiile mobile sunt variate: de la simpla înregistrare a vocii până la procesarea complexă a fluxului audio în timp real.
Mesageriile și aplicațiile de notițe folosesc microfonul pentru înregistrarea mesajelor vocale. În acest caz, Microphone Permission se solicită la apăsarea butonului de înregistrare. După finalizarea înregistrării, este important să opriți sesiunea audio pentru ca alte aplicații să poată folosi microfonul. AVAudioSession pe iOS și AudioManager pe Android gestionează focalizarea audio.
Aplicațiile cu introducere vocală (căutare, dictare, asistenți vocali) folosesc microfonul împreună cu API-ul de recunoaștere a vorbirii. Pe Android este SpeechRecognizer din android.speech, pe iOS — SFSpeechRecognizer din Speech framework. Pentru recunoașterea vorbirii poate fi necesară o permisiune suplimentară de acces la serviciile de recunoaștere (SPEECH pe Android, SFSpeechRecognizer.requestAuthorization pe iOS).
Aplicațiile pentru apeluri video (WebRTC, Zoom, Telegram) solicită Microphone Permission simultan cu Camera Permission. În acest context, este important să solicitați ambele permisiuni secvențial, nu simultan, pentru a nu copleși utilizatorul cu dialoguri. WebRTC utilizează getUserMedia pentru captura audio și video, dar pe platformele mobile sunt necesare permisiunile de sistem în prealabil.
Pentru o înregistrare de calitate, este necesară configurarea corectă a parametrilor sesiunii audio. Pe iOS, categoria .playAndRecord permite redarea și înregistrarea simultană a sunetului. Pe Android, selectarea AudioSource.MIC asigură captura de la microfonul principal, iar AudioSource.VOICE_COMMUNICATION optimizează înregistrarea pentru comunicarea vocală. Adițional, se poate configura frecvența de eșantionare 44100 Hz și formatul PCM 16 biți pentru a atinge calitatea standard CD.
În timpul înregistrării audio pot apărea întreruperi de sistem: apel primit, alarmă, notificare de la altă aplicație. Pe iOS, AVAudioSessionDelegate gestionează beginInterruption și endInterruption. Pe Android, AudioManager.OnAudioFocusChangeListener notifică aplicația despre pierderea sau redobândirea focalizării audio. Gestionarea corectă a întreruperilor permite păstrarea înregistrării la evenimente neașteptate și evitarea pierderii de date. Se recomandă suspendarea înregistrării la pierderea focalizării și reluarea după redobândirea acesteia cu notificarea utilizatorului.
Optimizarea capturii audio include configurarea frecvenței de eșantionare, dimensiunii bufferului și formatului de codare. Pentru mesajele vocale este suficientă frecvența 44100 Hz și canalul mono. Pentru recunoașterea vorbirii poate fi necesară frecvența 16000 Hz.
Pe iOS utilizați AVAudioSession.setPreferredIOBufferDuration pentru configurarea întârzierii de înregistrare. Un buffer mai mic reduce întârzierea, dar crește încărcarea procesorului. Pe Android, AudioRecord.getMinBufferSize returnează dimensiunea minimă a bufferului pentru parametrii specificați. Se recomandă utilizarea unui buffer nu mai mic decât acest minim pentru a preveni pierderea datelor în timpul înregistrării în condiții de încărcare ridicată a sistemului.
Cele mai bune practici de lucru cu Microphone Permission au scopul de a crește încrederea utilizatorului și conformitatea cu cerințele platformelor.
Înainte de a solicita Microphone Permission, afișați un ecran pe care să explicați de ce aplicația are nevoie de microfon și cum va fi utilizată înregistrarea. Indicați dacă audio este transmis pe server sau procesat local. Utilizatorii sunt mult mai dispuși să accepte accesul dacă înțeleg că înregistrarea nu părăsește dispozitivul. Procesarea locală (on-device ASR) este un argument puternic pentru încredere.
Dacă aplicația nu necesită înregistrare audio în fundal, opriți microfonul la trecerea în modul fundal. Acest lucru nu doar economisește bateria, dar și previne reacția negativă a utilizatorului care vede indicatorul de înregistrare. Pe iOS utilizați metodele UIApplicationDelegate applicationDidEnterBackground pentru suspendarea înregistrării. Pe Android gestionați onPause și onStop în Activity sau Service.
Afișați propriul indicator de înregistrare (pictograma animată a microfonului sau undă) în timpul capturii audio. Acesta informează utilizatorul că microfonul este activ și reduce riscul unei reacții negative. Apple și Google recomandă duplicarea indicatorului de sistem cu propriul element UI pentru maximă transparență.
Întrebări frecvente
Nu, permisiunea microfonului este necesară doar pentru captura audio de la microfon. Redarea sunetului prin difuzor sau căști nu necesită Microphone Permission. Pentru redare este suficientă configurarea sesiunii audio pe iOS sau AudioTrack pe Android.
Utilizați ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Metoda returnează PackageManager.PERMISSION_GRANTED sau PERMISSION_DENIED. Adițional, verificați dacă microfonul este disponibil pe dispozitiv prin PackageManager.hasSystemFeature.
Propuneți un scenariu alternativ: introducere text în loc de vocală, trimiterea mesajului fără audio, vizionarea video fără sunet. Dacă funcția vocală este critică, afișați un ecran cu instrucțiuni de activare a permisiunii în setările de sistem și un buton de navigare.
Începând cu Android 12, aplicația în fundal nu poate accesa microfonul. Înregistrarea activă este suspendată la trecerea în modul fundal. În plus, a apărut indicatorul Privacy Chip — o pictogramă verde în bara de stare care arată că aplicația folosește microfonul.
Cele mai frecvente motive: lipsa cheii NSMicrophoneUsageDescription, descrierea nespecifică a motivului („pentru înregistrarea mesajelor vocale" în loc de „pentru îmbunătățirea serviciului"), solicitarea permisiunii fără o acțiune explicită a utilizatorului sau utilizarea microfonului în fundal fără funcționalitate justificată.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și