Microphone Permission es un permiso del sistema necesario para que una aplicación acceda al micrófono del dispositivo. Se requiere para grabar audio, mensajes de voz, videollamadas y reconocimiento de voz. Según Apple Developer Documentation, 2024, todas las aplicaciones que utilizan captura de audio deben solicitar el consentimiento explícito del usuario a través de un diálogo del sistema.
Puntos clave
Microphone Permission es un mecanismo de protección de privacidad que evita la grabación de audio no autorizada desde el micrófono del dispositivo. Las plataformas móviles consideran el micrófono como uno de los recursos más sensibles porque la grabación de audio puede capturar conversaciones personales, el entorno circundante e información confidencial.
Android clasifica RECORD_AUDIO como un permiso peligroso, e iOS requiere la adición obligatoria de la clave NSMicrophoneUsageDescription en Info.plist. En ambas plataformas, la solicitud se realiza en tiempo de ejecución y el usuario puede revocar el permiso en cualquier momento a través de la configuración del sistema. El indicador del sistema de grabación (punto naranja en iOS, indicador verde en Android 12+) señala al usuario que la aplicación está usando el micrófono en ese momento.
Según un estudio de Pew Research Center (2024), el 54% de los usuarios de dispositivos móviles han denegado el acceso al micrófono a una aplicación al menos una vez. La razón principal es no comprender por qué la aplicación necesita grabar audio. Por lo tanto, el desarrollador debe explicar el propósito del uso del micrófono de la manera más transparente posible.
El permiso de micrófono en Android se solicita declarando RECORD_AUDIO en el manifiesto y realizando una solicitud en tiempo de ejecución en el código de la aplicación. Desde Android 10, el acceso al micrófono está adicionalmente regulado por restricciones para aplicaciones en segundo plano.
El primer paso es declarar el permiso RECORD_AUDIO en el archivo de manifiesto. Sin esta declaración, la solicitud en tiempo de ejecución no tendrá efecto y la aplicación no podrá acceder al micrófono.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT es un permiso del sistema no disponible para aplicaciones de terceros. Solo lo usan las aplicaciones del sistema para capturar la salida de audio. Las aplicaciones normales solo necesitan RECORD_AUDIO para grabar con el micrófono.
Después de declarar en el manifiesto, debe realizar una solicitud en tiempo de ejecución. Considere un ejemplo usando AudioRecord para grabar audio desde el micrófono.
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()
// Grabando datos de audio en el búfer
}
Es importante manejar correctamente el ciclo de vida de la grabación de audio. Cuando la aplicación pasa a segundo plano en Android 9 y superior, la grabación del micrófono puede ser pausada por el sistema. Desde Android 10, el acceso al micrófono en segundo plano está adicionalmente restringido: una aplicación en segundo plano no puede iniciar la grabación y la grabación activa se pausa. La grabación en segundo plano requiere MediaProjection o un Service con notificación.
El permiso de micrófono en iOS se configura mediante la clave NSMicrophoneUsageDescription en Info.plist y llamando al método AVAudioSession.requestRecordPermission. Apple requiere una explicación obligatoria del motivo del uso del micrófono en el diálogo de solicitud.
La clave NSMicrophoneUsageDescription es obligatoria para cualquier aplicación que solicite acceso al micrófono. Sin ella, la aplicación fallará al intentar grabar audio.
<key>NSMicrophoneUsageDescription</key>
<string>La aplicación necesita acceso al micrófono para grabar notas de voz y enviar mensajes de audio.</string>
La solicitud de acceso al micrófono en iOS se realiza a través de AVAudioSession. Después de recibir la respuesta, la aplicación configura la sesión de audio y comienza a grabar.
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)")
}
}
En iOS 14 y superior, una aplicación que usa el micrófono muestra un indicador naranja en la barra de estado. El usuario puede ver qué aplicación está grabando audio en ese momento. Si la aplicación usa el micrófono en segundo plano sin una razón válida, Apple puede rechazar la actualización. AVAudioSession permite configurar la categoría y el modo de la sesión de audio, determinando el comportamiento de la aplicación al pasar a segundo plano.
Los escenarios de uso del micrófono en aplicaciones móviles son diversos: desde la simple grabación de voz hasta el procesamiento complejo de flujos de audio en tiempo real.
Las aplicaciones de mensajería y toma de notas usan el micrófono para grabar mensajes de voz. En este caso, Microphone Permission se solicita al presionar el botón de grabación. Después de completar la grabación, es importante detener la sesión de audio para que otras aplicaciones puedan usar el micrófono. AVAudioSession en iOS y AudioManager en Android gestionan el foco de audio.
Las aplicaciones con entrada de voz (búsqueda, dictado, asistentes de voz) usan el micrófono junto con APIs de reconocimiento de voz. En Android, es SpeechRecognizer de android.speech, en iOS — SFSpeechRecognizer del framework Speech. El reconocimiento de voz puede requerir un permiso adicional para los servicios de reconocimiento (SPEECH en Android, SFSpeechRecognizer.requestAuthorization en iOS).
Las aplicaciones de videollamadas (WebRTC, Zoom, Telegram) solicitan Microphone Permission junto con Camera Permission. En este contexto, es importante solicitar ambos permisos de forma secuencial, no simultánea, para no abrumar al usuario con diálogos. WebRTC usa getUserMedia para capturar audio y video, pero en plataformas móviles se requieren primero los permisos del sistema.
Para una grabación de calidad, debe configurar correctamente los parámetros de la sesión de audio. En iOS, la categoría .playAndRecord permite reproducir y grabar sonido simultáneamente. En Android, elegir AudioSource.MIC proporciona captura desde el micrófono principal, mientras que AudioSource.VOICE_COMMUNICATION optimiza la grabación para comunicación por voz. Además, puede configurar una frecuencia de muestreo de 44100 Hz y formato PCM de 16 bits para calidad de CD estándar.
Durante la grabación de audio pueden ocurrir interrupciones del sistema: llamada entrante, activación de alarma, notificación de otra aplicación. En iOS, AVAudioSessionDelegate maneja beginInterruption y endInterruption. En Android, AudioManager.OnAudioFocusChangeListener notifica a la aplicación sobre la pérdida o recuperación del foco de audio. El manejo adecuado de interrupciones permite guardar la grabación durante eventos inesperados y evitar la pérdida de datos. Se recomienda pausar la grabación al perder el foco y reanudarla después de su recuperación con una notificación al usuario.
La optimización de captura de audio incluye la configuración de la frecuencia de muestreo, el tamaño del búfer y el formato de codificación. Para mensajes de voz, una frecuencia de 44100 Hz y canal mono son suficientes. Para reconocimiento de voz, puede ser necesaria una frecuencia de 16000 Hz.
En iOS, use AVAudioSession.setPreferredIOBufferDuration para configurar la latencia de grabación. Un búfer más pequeño reduce la latencia pero aumenta la carga de la CPU. En Android, AudioRecord.getMinBufferSize devuelve el tamaño mínimo del búfer para los parámetros dados. Se recomienda usar un búfer no menor que este mínimo para evitar la pérdida de datos al grabar bajo alta carga del sistema.
Las mejores prácticas para Microphone Permission están orientadas a aumentar la confianza del usuario y cumplir con los requisitos de las plataformas.
Antes de solicitar Microphone Permission, muestre una pantalla explicando por qué la aplicación necesita el micrófono y cómo se usará la grabación. Indique si el audio se transmite al servidor o se procesa localmente. Los usuarios son significativamente más propensos a conceder el acceso si entienden que la grabación no sale del dispositivo. El procesamiento local (ASR en el dispositivo) es un argumento sólido para la confianza.
Si la aplicación no requiere grabación de audio en segundo plano, asegúrese de detener el micrófono al pasar a segundo plano. Esto no solo ahorra batería sino que también previene una reacción negativa del usuario al ver el indicador de grabación. En iOS, use los métodos de UIApplicationDelegate applicationDidEnterBackground para pausar la grabación. En Android, maneje onPause y onStop en Activity o Service.
Muestre su propio indicador de grabación (icono de micrófono animado o forma de onda) durante la captura de audio. Esto informa al usuario que el micrófono está activo y reduce el riesgo de una reacción negativa. Apple y Google recomiendan duplicar el indicador del sistema con su propio elemento de UI para máxima transparencia.
Preguntas frecuentes
No, el permiso de micrófono solo se requiere para la captura de audio desde el micrófono. Reproducir sonido a través del altavoz o auriculares no requiere Microphone Permission. Para la reproducción, basta con configurar la sesión de audio en iOS o AudioTrack en Android.
Use ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). El método devuelve PackageManager.PERMISSION_GRANTED o PERMISSION_DENIED. Adicionalmente, verifique si el micrófono está disponible en el dispositivo mediante PackageManager.hasSystemFeature.
Ofrezca un escenario alternativo: entrada de texto en lugar de voz, enviar un mensaje sin audio, ver un video sin sonido. Si la función de entrada de voz es crítica, muestre una pantalla con instrucciones sobre cómo habilitar el permiso en configuración del sistema y un botón para navegar allí.
Desde Android 12, una aplicación en segundo plano no puede acceder al micrófono. La grabación activa se pausa al pasar a segundo plano. Además, ha aparecido el indicador Privacy Chip — un icono verde en la barra de estado que muestra que una aplicación está usando el micrófono.
Las razones más comunes: falta de la clave NSMicrophoneUsageDescription, descripción no específica del motivo (“para mejorar el servicio” en lugar de “para grabar mensajes de voz”), solicitud de permiso sin una acción explícita del usuario, o uso del micrófono en segundo plano sin funcionalidad justificada.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también