Microphone Permission — це системний дозвіл, необхідний додатку для доступу до мікрофона пристрою. Він потрібен для запису аудіо, голосових повідомлень, відеодзвінків та розпізнавання мови. За даними Apple Developer Documentation, 2024, всі додатки, що використовують аудіозахоплення, зобов'язані запитувати явну згоду користувача через системний діалог.
Головне
Microphone Permission — це механізм захисту конфіденційності, який запобігає несанкціонованому запису аудіо з мікрофона пристрою. Мобільні платформи відносять мікрофон до найбільш чутливих ресурсів, оскільки запис звуку може захоплювати особисті розмови, навколишнє середовище та конфіденційну інформацію.
Android класифікує RECORD_AUDIO як небезпечний дозвіл, а iOS вимагає обов'язкового додавання ключа NSMicrophoneUsageDescription в Info.plist. На обох платформах запит виконується під час виконання, а користувач може будь-коли відкликати дозвіл через системні налаштування. Системний індикатор запису (помаранчева точка на iOS, зелений індикатор на Android 12+) сигналізує користувачеві про те, що додаток використовує мікрофон у даний момент.
За даними дослідження Pew Research Center (2024), 54% користувачів мобільних пристроїв хоча б раз відмовляли додатку в доступі до мікрофона. Основна причина — нерозуміння, навіщо додатку запис аудіо. Тому розробнику необхідно максимально прозоро пояснювати мету використання мікрофона.
Дозвіл на мікрофон на Android запитується через оголошення RECORD_AUDIO в маніфесті та запит під час виконання в коді додатка. Починаючи з Android 10, доступ до мікрофона додатково регулюється обмеженнями для фонових додатків.
Перший крок — оголосити дозвіл RECORD_AUDIO у файлі маніфесту. Без цього оголошення запит під час виконання не матиме ефекту, і додаток не зможе отримати доступ до мікрофона.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT — це системний дозвіл, недоступний стороннім додаткам. Він використовується лише системними додатками для захоплення аудіовиходу. Звичайним додаткам достатньо RECORD_AUDIO для запису з мікрофона.
Після оголошення в маніфесті необхідно виконати запит під час виконання. Розглянемо приклад з використанням AudioRecord для запису аудіо з мікрофона.
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()
// Запис аудіоданих у буфер
}
Важливо коректно обробляти життєвий цикл запису аудіо. При переході додатка в фоновий режим на Android 9 і вище запис з мікрофона може бути призупинений системою. Починаючи з Android 10, фоновий доступ до мікрофона додатково обмежений: додаток у фоні не може почати запис, а активний запис призупиняється. Для фонового запису потрібен MediaProjection або Service з повідомленням.
Дозвіл на мікрофон на iOS налаштовується через ключ NSMicrophoneUsageDescription в Info.plist та виклик методу AVAudioSession.requestRecordPermission. Apple вимагає обов'язкового зазначення причини використання мікрофона в діалозі запиту.
Ключ NSMicrophoneUsageDescription обов'язковий для будь-якого додатка, який запитує доступ до мікрофона. Без нього додаток аварійно завершиться при спробі запису аудіо.
<key>NSMicrophoneUsageDescription</key>
<string>Додатку потрібен доступ до мікрофона для запису голосових нотаток і надсилання аудіоповідомлень.</string>
Запит доступу до мікрофона на iOS виконується через AVAudioSession. Після отримання відповіді додаток налаштовує аудіосесію та починає запис.
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)")
}
}
На iOS 14 і вище додаток, що використовує мікрофон, відображає помаранчевий індикатор у рядку стану. Користувач бачить, який додаток у даний момент записує аудіо. Якщо додаток використовує мікрофон у фоні без вагомої причини, Apple може відхилити оновлення. AVAudioSession дозволяє налаштувати категорію та режим аудіосесії, визначаючи поведінку додатка при переході в фоновий режим.
Сценарії використання мікрофона в мобільних додатках різноманітні: від простого запису голосу до складної обробки аудіопотоку в реальному часі.
Месенджери та додатки для нотаток використовують мікрофон для запису голосових повідомлень. У цьому випадку Microphone Permission запитується при натисканні кнопки запису. Після завершення запису важливо зупинити аудіосесію, щоб інші додатки могли використовувати мікрофон. AVAudioSession на iOS та AudioManager на Android керують фокусом аудіо.
Додатки з голосовим введенням (пошук, диктування, голосові помічники) використовують мікрофон у зв'язці з API розпізнавання мови. На Android це SpeechRecognizer з android.speech, на iOS — SFSpeechRecognizer з Speech framework. Для розпізнавання мови може знадобитися додатковий дозвіл на доступ до сервісів розпізнавання (SPEECH на Android, SFSpeechRecognizer.requestAuthorization на iOS).
Додатки для відеодзвінків (WebRTC, Zoom, Telegram) запитують Microphone Permission одночасно з Camera Permission. У цьому контексті важливо запитувати обидва дозволи послідовно, а не одночасно, щоб користувач не був перевантажений діалогами. WebRTC використовує getUserMedia для захоплення аудіо та відео, але на мобільних платформах попередньо потрібні системні дозволи.
Для якісного запису потрібно правильно налаштувати параметри аудіосесії. На iOS категорія .playAndRecord дозволяє одночасно відтворювати та записувати звук. На Android вибір AudioSource.MIC забезпечує захоплення з основного мікрофона, а AudioSource.VOICE_COMMUNICATION оптимізує запис для голосового зв'язку. Додатково можна налаштувати частоту дискретизації 44100 Гц та формат PCM 16 біт для досягнення стандартної якості CD.
При записі аудіо можуть виникати системні переривання: вхідний дзвінок, спрацьовування будильника, сповіщення від іншого додатка. На iOS AVAudioSessionDelegate обробляє beginInterruption та endInterruption. На Android AudioManager.OnAudioFocusChangeListener сповіщає додаток про втрату або повернення аудіофокусу. Коректна обробка переривань дозволяє зберегти запис при неочікуваних подіях та уникнути втрати даних. Рекомендується призупиняти запис при втраті фокусу та відновлювати після його повернення з повідомленням користувача.
Оптимізація захоплення аудіо включає налаштування частоти дискретизації, розміру буфера та формату кодування. Для голосових повідомлень достатньо частоти 44100 Гц та моно-каналу. Для розпізнавання мови може знадобитися частота 16000 Гц.
На iOS використовуйте AVAudioSession.setPreferredIOBufferDuration для налаштування затримки запису. Менший буфер знижує затримку, але збільшує навантаження на процесор. На Android AudioRecord.getMinBufferSize повертає мінімальний розмір буфера для заданих параметрів. Рекомендується використовувати буфер не менше цього мінімуму для запобігання втраті даних при записі в умовах високого навантаження на систему.
Найкращі практики роботи з Microphone Permission спрямовані на підвищення довіри користувача та відповідність вимогам платформ.
Перед запитом Microphone Permission покажіть екран, на якому поясніть, навіщо додатку мікрофон і як буде використовуватися запис. Вкажіть, чи передається аудіо на сервер або обробляється локально. Користувачі значно частіше погоджуються на доступ, якщо розуміють, що запис не покидає пристрій. Локальна обробка (on-device ASR) — сильний аргумент на користь довіри.
Якщо додаток не вимагає фонового запису аудіо, обов'язково зупиняйте мікрофон при переході в фоновий режим. Це не тільки економить батарею, але й запобігає негативній реакції користувача, який побачив індикатор запису. На iOS використовуйте методи UIApplicationDelegate applicationDidEnterBackground для призупинення запису. На Android обробляйте onPause та onStop в Activity або Service.
Показуйте власний індикатор запису (анімовану іконку мікрофона або хвилю) під час захоплення аудіо. Це інформує користувача про те, що мікрофон активний, і знижує ризик негативної реакції. Apple та Google рекомендують дублювати системний індикатор власним UI-елементом для максимальної прозорості.
Часті запитання
Ні, дозвіл на мікрофон потрібен тільки для захоплення аудіо з мікрофона. Відтворення звуку через динамік або навушники не потребує Microphone Permission. Для відтворення достатньо налаштувати аудіосесію на iOS або AudioTrack на Android.
Використовуйте ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Метод повертає PackageManager.PERMISSION_GRANTED або PERMISSION_DENIED. Додатково перевірте, чи доступний мікрофон на пристрої через PackageManager.hasSystemFeature.
Запропонуйте альтернативний сценарій: текстовий ввід замість голосового, надсилання повідомлення без аудіо, перегляд відео без звуку. Якщо функція голосового вводу критична, покажіть екран з інструкцією щодо ввімкнення дозволу в системних налаштуваннях та кнопкою переходу.
Починаючи з Android 12, додаток у фоні не може отримати доступ до мікрофона. Активний запис призупиняється при переході в фоновий режим. Крім того, з'явився індикатор Privacy Chip — зелена іконка в рядку стану, яка показує, що додаток використовує мікрофон.
Найпоширеніші причини: відсутність ключа NSMicrophoneUsageDescription, неконкретний опис причини («для покращення сервісу» замість «для запису голосових повідомлень»), запит дозволу без явної дії користувача або використання мікрофона у фоні без обґрунтованої функціональності.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також