Microphone Permission: istota, typy dostępu i zasada działania

Autor: IT Sectr Opublikowano: 2026-05-21 Czas czytania: 8 min

Microphone Permission to systemowe uprawnienie niezbędne aplikacji do uzyskania dostępu do mikrofonu urządzenia. Jest wymagane do nagrywania dźwięku, wiadomości głosowych, połączeń wideo i rozpoznawania mowy. Według Apple Developer Documentation, 2024, wszystkie aplikacje korzystające z przechwytywania dźwięku są zobowiązane do żądania wyraźnej zgody użytkownika za pomocą systemowego okna dialogowego.

Najważniejsze

  • Microphone Permission to obowiązkowe uprawnienie dla każdej aplikacji nagrywającej dźwięk na urządzeniu mobilnym.
  • Android używa Manifest.permission.RECORD_AUDIO z żądaniem w czasie wykonania od API 23.
  • iOS wymaga klucza NSMicrophoneUsageDescription w Info.plist oraz wywołania AVAudioSession.requestRecordPermission.
  • Żądanie w momencie aktywacji mikrofonu (przycisk „Nagraj wiadomość głosową“) zwiększa szanse na zatwierdzenie.
  • Praca w tle z mikrofonem wymaga dodatkowych uprawnień i ścisłego uzasadnienia.

Istota Microphone Permission

Microphone Permission to mechanizm ochrony prywatności, który zapobiega nieautoryzowanemu nagrywaniu dźwięku z mikrofonu urządzenia. Platformy mobilne klasyfikują mikrofon jako jeden z najbardziej wrażliwych zasobów, ponieważ nagrywanie dźwięku może przechwytywać prywatne rozmowy, otoczenie i poufne informacje.

Android klasyfikuje RECORD_AUDIO jako niebezpieczne uprawnienie, a iOS wymaga obowiązkowego dodania klucza NSMicrophoneUsageDescription w Info.plist. Na obu platformach żądanie jest wykonywane w czasie wykonania, a użytkownik może w każdej chwili cofnąć uprawnienie przez ustawienia systemowe. Systemowy wskaźnik nagrywania (pomarańczowa kropka na iOS, zielony wskaźnik na Android 12+) sygnalizuje użytkownikowi, że aplikacja aktualnie używa mikrofonu.

Według badania Pew Research Center (2024), 54% użytkowników urządzeń mobilnych przynajmniej raz odmówiło aplikacji dostępu do mikrofonu. Głównym powodem jest brak zrozumienia, po co aplikacji nagrywanie dźwięku. Dlatego programista musi jak najbardziej przejrzyście wyjaśniać cel używania mikrofonu.

Uprawnienie do mikrofonu na Android

Uprawnienie do mikrofonu na Android jest żądane poprzez zadeklarowanie RECORD_AUDIO w manifeście i żądanie w czasie wykonania w kodzie aplikacji. Od Androida 10 dostęp do mikrofonu jest dodatkowo regulowany ograniczeniami dla aplikacji działających w tle.

Deklaracja w AndroidManifest.xml

Pierwszym krokiem jest zadeklarowanie uprawnienia RECORD_AUDIO w pliku manifestu. Bez tej deklaracji żądanie w czasie wykonania nie będzie skuteczne, a aplikacja nie uzyska dostępu do mikrofonu.

xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />

CAPTURE_AUDIO_OUTPUT to uprawnienie systemowe niedostępne dla aplikacji firm trzecich. Jest używane tylko przez aplikacje systemowe do przechwytywania wyjścia audio. Zwykłe aplikacje potrzebują jedynie RECORD_AUDIO do nagrywania z mikrofonu.

Żądanie w czasie wykonania w Kotlin

Po deklaracji w manifeście należy wykonać żądanie w czasie wykonania. Rozważmy przykład użycia AudioRecord do nagrywania dźwięku z mikrofonu.

kotlin
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()
    // Nagrywanie danych audio do bufora
}

Obsługa stanu nagrywania

Ważne jest prawidłowe obsługiwanie cyklu życia nagrywania dźwięku. Gdy aplikacja przechodzi do trybu tła na Android 9 i nowszych, nagrywanie z mikrofonu może zostać wstrzymane przez system. Od Androida 10 dostęp do mikrofonu w tle jest dodatkowo ograniczony: aplikacja w tle nie może rozpocząć nagrywania, a aktywne nagrywanie jest wstrzymywane. Do nagrywania w tle wymagany jest MediaProjection lub Service z powiadomieniem.

Uprawnienie do mikrofonu na iOS

Uprawnienie do mikrofonu na iOS jest konfigurowane poprzez klucz NSMicrophoneUsageDescription w Info.plist i wywołanie metody AVAudioSession.requestRecordPermission. Apple wymaga obowiązkowego wskazania przyczyny używania mikrofonu w oknie dialogowym żądania.

Konfiguracja Info.plist

Klucz NSMicrophoneUsageDescription jest obowiązkowy dla każdej aplikacji, która żąda dostępu do mikrofonu. Bez niego aplikacja ulegnie awarii przy próbie nagrywania dźwięku.

xml
<key>NSMicrophoneUsageDescription</key>
<string>Aplikacja potrzebuje dostępu do mikrofonu do nagrywania notatek głosowych i wysyłania wiadomości audio.</string>

Żądanie w Swift

Żądanie dostępu do mikrofonu na iOS jest wykonywane przez AVAudioSession. Po otrzymaniu odpowiedzi aplikacja konfiguruje sesję audio i rozpoczyna nagrywanie.

swift
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)")
    }
}

Wskaźnik nagrywania

Na iOS 14 i nowszych aplikacja używająca mikrofonu wyświetla pomarańczowy wskaźnik na pasku stanu. Użytkownik widzi, która aplikacja aktualnie nagrywa dźwięk. Jeśli aplikacja używa mikrofonu w tle bez ważnego powodu, Apple może odrzucić aktualizację. AVAudioSession umożliwia skonfigurowanie kategorii i trybu sesji audio, określając zachowanie aplikacji przy przejściu do trybu tła.

Scenariusze przechwytywania dźwięku

Scenariusze użycia mikrofonu w aplikacjach mobilnych są różnorodne: od prostego nagrywania głosu po złożone przetwarzanie strumienia audio w czasie rzeczywistym.

Wiadomości głosowe i notatki

Komunikatory i aplikacje do notatek używają mikrofonu do nagrywania wiadomości głosowych. W tym przypadku Microphone Permission jest żądane po naciśnięciu przycisku nagrywania. Po zakończeniu nagrywania ważne jest zatrzymanie sesji audio, aby inne aplikacje mogły korzystać z mikrofonu. AVAudioSession na iOS i AudioManager na Android zarządzają fokusem audio.

Rozpoznawanie mowy

Aplikacje z wprowadzaniem głosowym (wyszukiwanie, dyktowanie, asystenci głosowi) używają mikrofonu w połączeniu z API rozpoznawania mowy. Na Android jest to SpeechRecognizer z android.speech, na iOS — SFSpeechRecognizer z Speech framework. Do rozpoznawania mowy może być wymagane dodatkowe uprawnienie dostępu do usług rozpoznawania (SPEECH na Android, SFSpeechRecognizer.requestAuthorization na iOS).

Połączenia wideo i streaming

Aplikacje do połączeń wideo (WebRTC, Zoom, Telegram) żądają Microphone Permission jednocześnie z Camera Permission. W tym kontekście ważne jest żądanie obu uprawnień sekwencyjnie, a nie jednocześnie, aby nie przeciążać użytkownika oknami dialogowymi. WebRTC używa getUserMedia do przechwytywania dźwięku i wideo, ale na platformach mobilnych wymagane są wcześniej uprawnienia systemowe.

Konfiguracja sesji audio

Do wysokiej jakości nagrywania wymagane jest prawidłowe skonfigurowanie parametrów sesji audio. Na iOS kategoria .playAndRecord umożliwia jednoczesne odtwarzanie i nagrywanie dźwięku. Na Android wybór AudioSource.MIC zapewnia przechwytywanie z głównego mikrofonu, a AudioSource.VOICE_COMMUNICATION optymalizuje nagrywanie do komunikacji głosowej. Dodatkowo można skonfigurować częstotliwość próbkowania 44100 Hz i format PCM 16 bitów, aby osiągnąć standardową jakość CD.

Obsługa przerwań nagrywania

Podczas nagrywania dźwięku mogą wystąpić przerwania systemowe: połączenie przychodzące, alarm, powiadomienie z innej aplikacji. Na iOS AVAudioSessionDelegate obsługuje beginInterruption i endInterruption. Na Android AudioManager.OnAudioFocusChangeListener powiadamia aplikację o utracie lub odzyskaniu fokusu audio. Prawidłowa obsługa przerwań pozwala zachować nagranie przy nieoczekiwanych zdarzeniach i uniknąć utraty danych. Zaleca się wstrzymywanie nagrywania przy utracie fokusu i wznawianie po jego odzyskaniu z powiadomieniem użytkownika.

Optymalizacja przechwytywania dźwięku

Optymalizacja przechwytywania dźwięku obejmuje konfigurację częstotliwości próbkowania, rozmiaru bufora i formatu kodowania. Do wiadomości głosowych wystarcza częstotliwość 44100 Hz i kanał mono. Do rozpoznawania mowy może być wymagana częstotliwość 16000 Hz.

Na iOS użyj AVAudioSession.setPreferredIOBufferDuration do konfiguracji opóźnienia nagrywania. Mniejszy bufor zmniejsza opóźnienie, ale zwiększa obciążenie procesora. Na Android AudioRecord.getMinBufferSize zwraca minimalny rozmiar bufora dla zadanych parametrów. Zaleca się używanie bufora nie mniejszego niż to minimum, aby zapobiec utracie danych podczas nagrywania w warunkach wysokiego obciążenia systemu.

Najlepsze praktyki pracy z mikrofonem

Najlepsze praktyki pracy z Microphone Permission mają na celu zwiększenie zaufania użytkownika i spełnienie wymagań platform.

Wyjaśniaj cel przed nagrywaniem

Przed żądaniem Microphone Permission pokaż ekran, na którym wyjaśnisz, po co aplikacji mikrofon i jak będzie używane nagrywanie. Wskaż, czy dźwięk jest przesyłany na serwer, czy przetwarzany lokalnie. Użytkownicy znacznie częściej wyrażają zgodę na dostęp, jeśli rozumieją, że nagranie nie opuszcza urządzenia. Przetwarzanie lokalne (on-device ASR) to silny argument na rzecz zaufania.

Zatrzymuj nagrywanie w tle

Jeśli aplikacja nie wymaga nagrywania w tle, koniecznie zatrzymuj mikrofon przy przejściu do trybu tła. To nie tylko oszczędza baterię, ale także zapobiega negatywnej reakcji użytkownika, który widzi wskaźnik nagrywania. Na iOS używaj metod UIApplicationDelegate applicationDidEnterBackground do wstrzymania nagrywania. Na Android obsługuj onPause i onStop w Activity lub Service.

Używaj wskaźników nagrywania

Pokazuj własny wskaźnik nagrywania (animowaną ikonę mikrofonu lub falę) podczas przechwytywania dźwięku. To informuje użytkownika, że mikrofon jest aktywny i zmniejsza ryzyko negatywnej reakcji. Apple i Google zalecają dublowanie systemowego wskaźnika własnym elementem UI dla maksymalnej przejrzystości.

Często zadawane pytania

Czy Microphone Permission jest wymagane do odtwarzania dźwięku?

Nie, uprawnienie do mikrofonu jest wymagane tylko do przechwytywania dźwięku z mikrofonu. Odtwarzanie dźwięku przez głośnik lub słuchawki nie wymaga Microphone Permission. Do odtwarzania wystarczy skonfigurowanie sesji audio na iOS lub AudioTrack na Android.

Jak sprawdzić status Microphone Permission na Android?

Użyj ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Metoda zwraca PackageManager.PERMISSION_GRANTED lub PERMISSION_DENIED. Dodatkowo sprawdź, czy mikrofon jest dostępny na urządzeniu przez PackageManager.hasSystemFeature.

Co zrobić, jeśli użytkownik odmówił Microphone Permission?

Zaproponuj alternatywny scenariusz: wprowadzanie tekstowe zamiast głosowego, wysłanie wiadomości bez dźwięku, oglądanie wideo bez dźwięku. Jeśli funkcja głosowa jest krytyczna, pokaż ekran z instrukcją włączenia uprawnienia w ustawieniach systemowych i przyciskiem przejścia.

Jak działa Microphone Permission na Android 12+?

Od Androida 12 aplikacja w tle nie może uzyskać dostępu do mikrofonu. Aktywne nagrywanie jest wstrzymywane przy przejściu do trybu tła. Ponadto pojawił się wskaźnik Privacy Chip — zielona ikona na pasku stanu, pokazująca, że aplikacja używa mikrofonu.

Dlaczego App Store odrzucił aplikację z Microphone Permission?

Najczęstsze przyczyny: brak klucza NSMicrophoneUsageDescription, niekonkretny opis przyczyny („w celu ulepszenia usługi“ zamiast „do nagrywania wiadomości głosowych“), żądanie uprawnienia bez wyraźnego działania użytkownika lub używanie mikrofonu w tle bez uzasadnionej funkcjonalności.

Podsumowanie

  • Microphone Permission to systemowe uprawnienie do przechwytywania dźwięku, obowiązkowe na obu platformach mobilnych.
  • Android używa RECORD_AUDIO z żądaniem w czasie wykonania i ograniczeniem dostępu w tle od Androida 10.
  • iOS wymaga NSMicrophoneUsageDescription w Info.plist i wywołania AVAudioSession.requestRecordPermission z obowiązkowym opisem przyczyny.
  • Systemowe wskaźniki (pomarańczowa kropka na iOS, Privacy Chip na Android) informują użytkownika o aktywności mikrofonu.
  • Scenariusze użycia obejmują wiadomości głosowe, rozpoznawanie mowy, połączenia wideo i nagrywanie dźwięku.
  • Nagrywanie w tle jest ściśle ograniczone na obu platformach i wymaga dodatkowych uprawnień i uzasadnienia.
  • Alternatywne scenariusze przy odmowie (wprowadzanie tekstowe, wysyłanie bez dźwięku) są obowiązkowe do poprawnego działania aplikacji.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również