Microphone Permission è un'autorizzazione di sistema necessaria a un'applicazione per accedere al microfono del dispositivo. È richiesta per la registrazione audio, i messaggi vocali, le videochiamate e il riconoscimento vocale. Secondo la Apple Developer Documentation, 2024, tutte le applicazioni che utilizzano la cattura audio sono obbligate a richiedere il consenso esplicito dell'utente tramite un dialogo di sistema.
Punti chiave
Microphone Permission è un meccanismo di protezione della privacy che impedisce la registrazione audio non autorizzata dal microfono del dispositivo. Le piattaforme mobili considerano il microfono una delle risorse più sensibili, poiché la registrazione audio può catturare conversazioni personali, l'ambiente circostante e informazioni riservate.
Android classifica RECORD_AUDIO come autorizzazione pericolosa, e iOS richiede l'aggiunta obbligatoria della chiave NSMicrophoneUsageDescription in Info.plist. Su entrambe le piattaforme, la richiesta viene effettuata a runtime e l'utente può revocare l'autorizzazione in qualsiasi momento tramite le impostazioni di sistema. L'indicatore di sistema di registrazione (punto arancione su iOS, indicatore verde su Android 12+) segnala all'utente che l'applicazione sta utilizzando il microfono in quel momento.
Secondo uno studio del Pew Research Center (2024), il 54% degli utenti di dispositivi mobili ha negato l'accesso al microfono a un'applicazione almeno una volta. Il motivo principale è non capire perché l'app abbia bisogno di registrare audio. Pertanto, lo sviluppatore deve spiegare lo scopo dell'utilizzo del microfono nel modo più trasparente possibile.
L'autorizzazione del microfono su Android viene richiesta dichiarando RECORD_AUDIO nel manifest ed effettuando una richiesta a runtime nel codice dell'applicazione. A partire da Android 10, l'accesso al microfono è inoltre regolamentato da restrizioni per le applicazioni in background.
Il primo passo è dichiarare l'autorizzazione RECORD_AUDIO nel file manifest. Senza questa dichiarazione, la richiesta a runtime non avrà effetto e l'applicazione non potrà accedere al microfono.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT è un'autorizzazione di sistema non disponibile per applicazioni di terze parti. Viene utilizzata solo dalle applicazioni di sistema per catturare l'uscita audio. Le applicazioni normali necessitano solo di RECORD_AUDIO per registrare dal microfono.
Dopo la dichiarazione nel manifest, è necessario effettuare una richiesta a runtime. Consideriamo un esempio utilizzando AudioRecord per registrare audio dal microfono.
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()
// Registrazione dei dati audio nel buffer
}
È importante gestire correttamente il ciclo di vita della registrazione audio. Quando l'applicazione passa in background su Android 9 e superiori, la registrazione del microfono può essere messa in pausa dal sistema. A partire da Android 10, l'accesso al microfono in background è ulteriormente limitato: un'app in background non può avviare la registrazione e la registrazione attiva viene messa in pausa. La registrazione in background richiede MediaProjection o un Service con notifica.
L'autorizzazione del microfono su iOS viene configurata tramite la chiave NSMicrophoneUsageDescription in Info.plist e la chiamata al metodo AVAudioSession.requestRecordPermission. Apple richiede una spiegazione obbligatoria del motivo dell'utilizzo del microfono nel dialogo di richiesta.
La chiave NSMicrophoneUsageDescription è obbligatoria per qualsiasi applicazione che richieda l'accesso al microfono. Senza di essa, l'applicazione si bloccherà quando tenta di registrare audio.
<key>NSMicrophoneUsageDescription</key>
<string>L'app necessita dell'accesso al microfono per registrare note vocali e inviare messaggi audio.</string>
La richiesta di accesso al microfono su iOS viene effettuata tramite AVAudioSession. Dopo aver ricevuto la risposta, l'applicazione configura la sessione audio e avvia la registrazione.
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)")
}
}
Su iOS 14 e superiori, un'applicazione che utilizza il microfono mostra un indicatore arancione nella barra di stato. L'utente può vedere quale applicazione sta registrando audio in quel momento. Se l'applicazione utilizza il microfono in background senza un motivo valido, Apple può rifiutare l'aggiornamento. AVAudioSession consente di configurare la categoria e la modalità della sessione audio, determinando il comportamento dell'applicazione quando passa in background.
Gli scenari di utilizzo del microfono nelle applicazioni mobili sono diversi: dalla semplice registrazione vocale alla complessa elaborazione del flusso audio in tempo reale.
Le applicazioni di messaggistica e prendi note utilizzano il microfono per registrare messaggi vocali. In questo caso, Microphone Permission viene richiesto quando si preme il pulsante di registrazione. Dopo aver completato la registrazione, è importante fermare la sessione audio in modo che altre applicazioni possano utilizzare il microfono. AVAudioSession su iOS e AudioManager su Android gestiscono il focus audio.
Le applicazioni con input vocale (ricerca, dettatura, assistenti vocali) utilizzano il microfono in combinazione con API di riconoscimento vocale. Su Android, è SpeechRecognizer da android.speech, su iOS — SFSpeechRecognizer dal framework Speech. Il riconoscimento vocale può richiedere un'autorizzazione aggiuntiva per i servizi di riconoscimento (SPEECH su Android, SFSpeechRecognizer.requestAuthorization su iOS).
Le applicazioni di videochiamata (WebRTC, Zoom, Telegram) richiedono Microphone Permission insieme a Camera Permission. In questo contesto, è importante richiedere entrambe le autorizzazioni in sequenza, non simultaneamente, per non sovraccaricare l'utente con dialoghi. WebRTC utilizza getUserMedia per la cattura audio e video, ma sulle piattaforme mobili sono prima necessarie le autorizzazioni di sistema.
Per una registrazione di qualità, è necessario configurare correttamente i parametri della sessione audio. Su iOS, la categoria .playAndRecord consente di riprodurre e registrare il suono simultaneamente. Su Android, la scelta di AudioSource.MIC fornisce la cattura dal microfono principale, mentre AudioSource.VOICE_COMMUNICATION ottimizza la registrazione per la comunicazione vocale. Inoltre, è possibile impostare una frequenza di campionamento di 44100 Hz e un formato PCM a 16 bit per la qualità CD standard.
Durante la registrazione audio, possono verificarsi interruzioni di sistema: chiamata in arrivo, attivazione della sveglia, notifica da un'altra applicazione. Su iOS, AVAudioSessionDelegate gestisce beginInterruption e endInterruption. Su Android, AudioManager.OnAudioFocusChangeListener notifica all'applicazione la perdita o il ritorno del focus audio. Una corretta gestione delle interruzioni consente di salvare la registrazione durante eventi imprevisti e di evitare la perdita di dati. Si consiglia di mettere in pausa la registrazione quando si perde il focus e di riprenderla dopo il suo ritorno con una notifica all'utente.
L'ottimizzazione della cattura audio include la configurazione della frequenza di campionamento, della dimensione del buffer e del formato di codifica. Per i messaggi vocali, una frequenza di 44100 Hz e un canale mono sono sufficienti. Per il riconoscimento vocale, potrebbe essere necessaria una frequenza di 16000 Hz.
Su iOS, utilizzare AVAudioSession.setPreferredIOBufferDuration per configurare la latenza di registrazione. Un buffer più piccolo riduce la latenza ma aumenta il carico della CPU. Su Android, AudioRecord.getMinBufferSize restituisce la dimensione minima del buffer per i parametri specificati. Si consiglia di utilizzare un buffer non inferiore a questo minimo per evitare la perdita di dati durante la registrazione sotto carico elevato del sistema.
Le migliori pratiche per Microphone Permission mirano ad aumentare la fiducia dell'utente e a soddisfare i requisiti della piattaforma.
Prima di richiedere Microphone Permission, mostrare una schermata che spieghi perché l'app ha bisogno del microfono e come verrà utilizzata la registrazione. Indicare se l'audio viene trasmesso al server o elaborato localmente. Gli utenti sono significativamente più propensi a concedere l'accesso se capiscono che la registrazione non lascia il dispositivo. L'elaborazione locale (ASR sul dispositivo) è un forte argomento per la fiducia.
Se l'applicazione non richiede la registrazione audio in background, assicurarsi di fermare il microfono quando si passa in background. Ciò non solo risparmia batteria, ma previene anche una reazione negativa dell'utente che vede l'indicatore di registrazione. Su iOS, utilizzare i metodi di UIApplicationDelegate applicationDidEnterBackground per mettere in pausa la registrazione. Su Android, gestire onPause e onStop in Activity o Service.
Mostrare il proprio indicatore di registrazione (icona del microfono animata o forma d'onda) durante la cattura audio. Ciò informa l'utente che il microfono è attivo e riduce il rischio di una reazione negativa. Apple e Google raccomandano di duplicare l'indicatore di sistema con il proprio elemento UI per la massima trasparenza.
Domande frequenti
No, l'autorizzazione del microfono è richiesta solo per la cattura audio dal microfono. Riprodurre il suono attraverso l'altoparlante o le cuffie non richiede Microphone Permission. Per la riproduzione, è sufficiente configurare la sessione audio su iOS o AudioTrack su Android.
Utilizzare ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Il metodo restituisce PackageManager.PERMISSION_GRANTED o PERMISSION_DENIED. Inoltre, verificare se il microfono è disponibile sul dispositivo tramite PackageManager.hasSystemFeature.
Offrire uno scenario alternativo: input di testo invece della voce, invio di un messaggio senza audio, visione di un video senza suono. Se la funzione di input vocale è critica, mostrare una schermata con le istruzioni su come abilitare l'autorizzazione nelle impostazioni di sistema e un pulsante per navigare lì.
A partire da Android 12, un'applicazione in background non può accedere al microfono. La registrazione attiva viene messa in pausa quando si passa in background. Inoltre, è apparso l'indicatore Privacy Chip — un'icona verde nella barra di stato che mostra che un'applicazione sta utilizzando il microfono.
I motivi più comuni: mancanza della chiave NSMicrophoneUsageDescription, descrizione non specifica del motivo (“per migliorare il servizio” invece di “per registrare messaggi vocali”), richiesta di autorizzazione senza un'azione esplicita dell'utente o utilizzo del microfono in background senza funzionalità giustificata.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche