Microphone Permission — ez egy rendszerengedély, amely szükséges az alkalmazásnak a készülék mikrofonjához való hozzáféréshez. Az audiafelvételhez, hangüzenetekhez, videohívásokhoz és beszédfelismeréshez szükséges. A Apple Developer Documentation, 2024 szerint minden audiafelvételt használó alkalmazás köteles kifejezett felhasználói hozzájárulást kérni a rendszer párbeszédablakon keresztül.
Főbb pontok
Microphone Permission egy adatvédelmi mechanizmus, amely megakadályozza a készülék mikrofonjáról történő jogosulatlan audiafelvételt. A mobil platformok a mikrofont az egyik legérzékenyebb erőforrásként osztályozzák, mivel a hangfelvétel magánférésre szánt beszélgetéseket, a környezetet és bizalmas információkat rögzíthet.
Az Android a RECORD_AUDIO-t veszélyes engedélyként osztályozza, az iOS pedig az NSMicrophoneUsageDescription kulcs kötelező hozzáadását követeli meg az Info.plist-ben. Mindkét platformon a kérés futásidőben történik, és a felhasználó bármikor visszavonhatja az engedélyt a rendszerbeállításokon keresztül. Rendszerjelző (narancssárga pont iOS-en, zöld jelző Android 12+-on) jelzi a felhasználónak, hogy az alkalmazás éppen használja a mikrofont.
A Pew Research Center (2024) kutatása szerint a mobileszköz-használók 54%-a legalább egyszer megtagadta a mikrofonhozzáférést egy alkalmazástól. A fő ok — annak nem megértése, hogy az alkalmazásnak miért van szüksége audiafelvételre. Ezért a fejlesztőnek a lehető legátláthatóbban kell magyaráznia a mikrofon használatának célját.
Mikrofonengedély Androidon a RECORD_AUDIO manifest-ben történő deklarálásával és futásidőben kéréssel az alkalmazás kódjában történik. Android 10-től kezdve a mikrofonhoz való hozzáférést további korlátozások szabályozzák a háttéralkalmazások számára.
Az első lépés a RECORD_AUDIO engedély deklarálása a manifest fájlban. E deklaráció nélkül a futásidőbeni kérés nem lesz hatásos, és az alkalmazás nem fér hozzá a mikrofonhoz.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT egy rendszerengedély, amely nem érhető el harmadik fél által készített alkalmazások számára. Csak rendszeralkalmazások használják az audikiíenelet rögzítésére. A szokásos alkalmazásoknak csak RECORD_AUDIO-ra van szükségük a mikrofonról történő felvételhez.
A manifest-ben történő deklarálás után végre kell hajtani a futásidőbeni kérést. Nézzünk egy példát az AudioRecord használatára a mikrofonról törtૂ ő audiafelvételre.
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()
// Audiaadatok írása a pufferbe
}
Fontos a audiafelvétel életciklusának helyes kezelése. Amikor az alkalmazás háttérmódba vált Android 9 és újabb verziókon, a mikrofonról történő felvétel felfüggeszthető a rendszer által. Android 10-től kezdve a háttérben történő mikrofonhozzáférés tovább korlátozott: a háttéralkalmazás nem kezdhet felvételt, és az aktív felvétel felfüggesztésre kerül. Háttérben történő felvételhez MediaProjection vagy Service értesítéssel szükséges.
Mikrofonengedély iOS-en az NSMicrophoneUsageDescription kulccsal az Info.plist-ben és az AVAudioSession.requestRecordPermission metódus meghívásával konfigurálható. Apple kötelezi a mikrofon használata okának kötelező feltüntetését a kérő párbeszédablakban.
Az NSMicrophoneUsageDescription kulcs kötelező minden olyan alkalmazáshoz, amely mikrofonhozzáférést kér. Nélküle az alkalmazás összeomlik audiafelvételi kísérlet esetén.
<key>NSMicrophoneUsageDescription</key>
<string>Az alkalmazásnak mikrofonhozzáférésre van szüksége hangjegyzetek rögzítéséhez és audiaüzenetek küldéséhez.</string>
A mikrofonhoz való hozzáférés kérése iOS-en az AVAudioSessionen keresztül történik. A válasz kézhezvétele után az alkalmazás konfigurálja a audiasessiót és elindítja a felvételt.
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 és újabb verziókon a mikrofont használó alkalmazás narancssárga jelzőt jelenít meg az állapotsorban. A felhasználó látja, melyik alkalmazás rögzít éppen audiat. Ha az alkalmazás érvényes ok nélkül használja a mikrofont a háttérben, az Apple elutasíthatja a frissítést. AVAudioSession lehetővé teszi a audiasessió kategóriájának és módjának konfigurálását, meghatározva az alkalmazás viselkedését háttérmódba váltáskor.
A mikrofon használatának forgatókönyvei a mobilalkalmazásokban változatosak: az egyszerű hangfelvételtől a komplex valós idejű audiafolyam-feldolgozásig.
Az üzenetküldők és jegyzetalkalmazások a mikrofont használják hangüzenetek rögzítéséhez. Ebben az esetben a Microphone Permission a felvétel gomb megnyomásakor kérődik. A felvétel befejezése után fontos leállítani a audiasessiót, hogy más alkalmazások használhassák a mikrofont. AVAudioSession iOS-en és AudioManager Androidon kezeli a audiafókuszt.
A hangbemenetű alkalmazások (keresés, diktálás, hangasszisztensek) a mikrofont a beszédfelismerési API-val együtt használják. Androidon ez a SpeechRecognizer az android.speech-ből, iOS-en — SFSpeechRecognizer a Speech framework-ből. A beszédfelismeréshez további engedélyre lehet szükség a felismerő szolgáltatások eléréséhez (SPEECH Androidon, SFSpeechRecognizer.requestAuthorization iOS-en).
A videohívás alkalmazások (WebRTC, Zoom, Telegram) a Microphone Permission-t a Camera Permission-mel együtt kérik. Ebben a kontextusban fontos, hogy a két engedélyt egymás után kérjük, ne egyszerre, hogy a felhasználó ne legyen túlterhelve párbeszédablakokkal. WebRTC a getUserMedia-t használja audiao és videó rögzítéséhez, de mobilos platformokon előzetesen rendszerengedélyek szükségesek.
A minőségi felvételhez a audiasessió paramétereinek helyes konfigurálása szükséges. iOS-en a .playAndRecord kategória lehetővé teszi a hang egyidejű lejátszását és rögzítését. Androidon az AudioSource.MIC választása biztosítja a rögzítést a főmikrofonról, az AudioSource.VOICE_COMMUNICATION pedig optimalizálja a felvételt hangkommunikációhoz. Továbbá konfigurálható a 44100 Hz-es mintavételezési frekvencia és a PCM 16 bites formátum a standard CD-minőség eléréséhez.
Audiafelvétel közben rendszerszintű megszakítások történhetnek: bejövő hívás, ébresztő, értesítés másik alkalmazásból. iOS-en az AVAudioSessionDelegate kezeli a beginInterruption és endInterruption eseményeket. Androidon az AudioManager.OnAudioFocusChangeListener értesíti az alkalmazást az audiafókusz elvesztéséről vagy visszatéréséről. A megszakítások helyes kezelése lehetővé teszi a felvétel megőrzését váratlan események esetén és megakadályozza az adatvesztést. Javasolt a felvétel felfüggesztése fókuszvesztéskor és folytatása annak visszatérte után a felhasználó értesítésével.
Audiafelvétel optimalizálása magában foglalja a mintavételezési frekvencia, a puffer méretének és a kódolási formátumnak a konfigurálását. Hangüzenetekhez elegendő a 44100 Hz-es frekvencia és a mono csatorna. Beszédfelismeréshez 16000 Hz-es frekvencia lehet szükséges.
iOS-en használja az AVAudioSession.setPreferredIOBufferDuration metódust a felvételi késleltetés konfigurálásához. A kisebb puffer csökkenti a késleltetést, de növeli a processzorterhelést. Androidon az AudioRecord.getMinBufferSize a megadott paraméterekhez tartozó minimális pufferméretet adja vissza. Javasolt a minimum nál nem kisebb puffer használata az adatvesztés megelőzése érdekében nagy rendszerterhelés mellett történő felvételkor.
Legjobb gyakorlatok a Microphone Permission használatához a felhasználói bizalom növelésére és a platformkövetelményeknek való megfelelésre irányulnak.
A Microphone Permission kérése előtt mutasson egy képernyőt, amely elmagyarázza, miért van szüksége az alkalmazásnak a mikrofonra és hogyan lesz használva a felvétel. Jelezze, hogy a hang szerverre kerül-e vagy lokálisan kerül feldolgozásra. A felhasználók sokkal gyakrabban adnak hozzáférést, ha megértik, hogy a felvétel nem hagyja el a készüléket. Lokális feldolgozás (on-device ASR) erős érv a bizalom mellett.
Ha az alkalmazás nem igényel háttérben audiafelvételt, feltétlenül állítsa le a mikrofont a háttérmódba váltáskor. Ez nemcsak az akkumulátort kíméli, hanem megakadályozza a felhasználó negatív reakcióját is, aki látja a felvételi jelzőt. iOS-en használja a UIApplicationDelegate applicationDidEnterBackground metódusait a felvétel felfüggesztéséhez. Androidon kezelje az onPause és onStop eseményeket Activity-ben vagy Service-ben.
Jelenítse meg saját felvételi jelzőjét (animált mikrofonikon vagy hullám) audiafelvétel közben. Ez tájékoztatja a felhasználót, hogy a mikrofon aktív, és csökkenti a negatív reakció kockázatát. Az Apple és a Google a rendszerjelző saját UI-elemmel történő megkettőzését ajánlja a maximális átláthatóság érdekében.
Gyakran Ismételt Kérdések
Nem, a mikrofonengedély csak a mikrofonról történő audiafogáshoz szükséges. A hang lejátszása hangszórón vagy fülhallgatón keresztül nem igényel Microphone Permission-t. A lejátszáshoz elegendŐ a audiasessió konfigurálása iOS-en vagy az AudioTrack Androidon.
Használja a ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) metódust. A metódus PackageManager.PERMISSION_GRANTED vagy PERMISSION_DENIED értéket ad vissza. Továbbá ellenőrizze, hogy a mikrofon elérhető-e a készüléken a PackageManager.hasSystemFeature segítségével.
Kínáljon alternatív forgatókönyvet: szöveges bevitel hang helyett, üzenet küldése audia nélkül, videó nézése hang nélkül. Ha a hangfunkció kritikus, mutasson egy képernyőt az engedély bekapcsolásának utasításával a rendszerbeállításokban és egy navigációs gombbal.
Android 12-től kezdve a háttéralkalmazás nem férhet hozzá a mikrofonhoz. Az aktív felvétel felfüggesztésre kerül a háttérmódba váltáskor. Ezenkívül megjelent a Privacy Chip jelző — egy zöld ikon az állapotsorban, amely azt mutatja, hogy az alkalmazás használja a mikrofont.
A leggyakoribb okok: az NSMicrophoneUsageDescription kulcs hiánya, nem specifikus indoklás („a szolgáltatás javítása” helyett „hangüzenetek rögzítése”), engedély kérése egyértelmű felhasználói művelet nélkül, vagy a mikrofon háttérben történő használata indokolt funkcionalitás nélkül.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is