Microphone Permission — ito ay isang pahintulot ng sistema na kailangan ng app upang ma-access ang mikropono ng device. Kinakailangan ito para sa pag-record ng audio, mga voice message, video call, at speech recognition. Ayon sa Apple Developer Documentation, 2024, lahat ng app na gumagamit ng audio capture ay obligadong humingi ng malinaw na pahintulot ng user sa pamamagitan ng system dialog.
Mga Pangunahing Punto
Microphone Permission ay isang mekanismo ng proteksyon sa privacy na pumipigil sa hindi awtorisadong pag-record ng audio mula sa mikropono ng device. Inuuri ng mga mobile platform ang mikropono bilang isa sa mga pinakasensitibong resource, dahil ang pag-record ng tunog ay maaaring makakuha ng pribadong usapan, kapaligiran, at kumpidensyal na impormasyon.
Inuuri ng Android ang RECORD_AUDIO bilang mapanganib na pahintulot, at ang iOS ay nangangailangan ng mandatoryong pagdagdag ng key na NSMicrophoneUsageDescription sa Info.plist. Sa parehong platform, ang request ay isinasagawa sa runtime, at ang user ay maaaring anumang oras bawiin ang pahintulot sa pamamagitan ng system settings. Ang system indicator ng pag-record (orange na tuldok sa iOS, berdeng indicator sa Android 12+) ay nagpapahiwatig sa user na kasalukuyang ginagamit ng app ang mikropono.
Ayon sa pananaliksik ng Pew Research Center (2024), 54% ng mga user ng mobile device ay kahit isang beses tumanggi sa pag-access ng mikropono sa isang app. Ang pangunahing dahilan ay hindi pag-unawa kung bakit kailangan ng app ang pag-record ng audio. Kaya naman dapat ipaliwanag ng developer ang layunin ng paggamit ng mikropono nang ganap na malinaw hangga't maaari.
Pahintulot ng mikropono sa Android ay hinihingi sa pamamagitan ng deklarasyon ng RECORD_AUDIO sa manifest at runtime request sa code ng app. Mula Android 10, ang pag-access sa mikropono ay karagdagang kinokontrol ng mga paghihigpit para sa mga background app.
Ang unang hakbang ay ideklara ang pahintulot na RECORD_AUDIO sa manifest file. Kung wala ang deklarasyong ito, ang runtime request ay hindi magkakaroon ng epekto at hindi makakakuha ang app ng access sa mikropono.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
Ang CAPTURE_AUDIO_OUTPUT ay isang system na pahintulot na hindi available sa third-party na app. Ginagamit lamang ito ng mga system app para sa pag-capture ng audio output. Ang mga ordinaryong app ay nangangailangan lamang ng RECORD_AUDIO para mag-record mula sa mikropono.
Pagkatapos ng deklarasyon sa manifest, kailangang isagawa ang runtime request. Tingnan natin ang halimbawa ng paggamit ng AudioRecord para mag-record ng audio mula sa mikropono.
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()
// Pag-record ng audio data sa buffer
}
Mahalaga na wastong pangasiwaan ang lifecycle ng pag-record ng audio. Kapag lumipat ang app sa background mode sa Android 9 at mas bago, ang pag-record mula sa mikropono ay maaaring masuspinde ng system. Mula Android 10, ang background access sa mikropono ay higit na limitado: ang app sa background ay hindi maaaring magsimula ng pag-record, at ang aktibong pag-record ay sinuspinde. Para sa background recording, kinakailangan ang MediaProjection o Service na may notification.
Pahintulot ng mikropono sa iOS ay na-configure sa pamamagitan ng key na NSMicrophoneUsageDescription sa Info.plist at pagtawag sa metodo na AVAudioSession.requestRecordPermission. Apple ay nangangailangan ng mandatoryong pagtukoy ng dahilan ng paggamit ng mikropono sa dialog ng request.
Ang key na NSMicrophoneUsageDescription ay mandatory para sa anumang app na humihingi ng access sa mikropono. Kung wala ito, ang app ay mag-crash kapag sinubukang mag-record ng audio.
<key>NSMicrophoneUsageDescription</key>
<string>Ang app ay nangangailangan ng access sa mikropono para mag-record ng voice notes at magpadala ng audio message.</string>
Ang request ng access sa mikropono sa iOS ay isinasagawa sa pamamagitan ng AVAudioSession. Pagkatanggap ng tugon, kino-configure ng app ang audio session at sinisimulan ang pag-record.
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)")
}
}
Sa iOS 14 at mas bago, ang app na gumagamit ng mikropono ay nagpapakita ng orange na indicator sa status bar. Nakikita ng user kung aling app ang kasalukuyang nagre-record ng audio. Kung ang app ay gumagamit ng mikropono sa background nang walang wastong dahilan, maaaring tanggihan ng Apple ang update. AVAudioSession ay nagbibigay-daan sa pag-configure ng kategorya at mode ng audio session, na tinutukoy ang pag-uugali ng app kapag lumipat sa background mode.
Mga scenario ng paggamit ng mikropono sa mga mobile app ay magkakaiba: mula sa simpleng pag-record ng boses hanggang sa kumplikadong real-time na pagproseso ng audio stream.
Ang mga messenger at note-taking app ay gumagamit ng mikropono para mag-record ng voice message. Sa kasong ito, ang Microphone Permission ay hinihingi kapag pinindot ang record button. Pagkatapos ng pag-record, mahalagang itigil ang audio session upang ang ibang app ay magamit ang mikropono. AVAudioSession sa iOS at AudioManager sa Android ay namamahala ng audio focus.
Ang mga app na may voice input (paghahanap, dikta, voice assistant) ay gumagamit ng mikropono kasama ng speech recognition API. Sa Android ito ay SpeechRecognizer mula sa android.speech, sa iOS — SFSpeechRecognizer mula sa Speech framework. Para sa speech recognition ay maaaring kailanganin ang karagdagang pahintulot para ma-access ang mga serbisyo ng pagkilala (SPEECH sa Android, SFSpeechRecognizer.requestAuthorization sa iOS).
Ang mga app para sa video call (WebRTC, Zoom, Telegram) ay humihingi ng Microphone Permission kasabay ng Camera Permission. Sa kontekstong ito, mahalagang hilingin ang parehong pahintulot nang sunud-sunod, hindi sabay-sabay, upang hindi ma-overload ang user ng mga dialog. WebRTC ay gumagamit ng getUserMedia para sa pag-capture ng audio at video, ngunit sa mga mobile platform ay kinakailangan muna ang system permissions.
Para sa mataas na kalidad na pag-record, kinakailangan ang tamang configuration ng mga parameter ng audio session. Sa iOS, ang kategoryang .playAndRecord ay nagbibigay-daan sa sabay na pag-play at pag-record ng tunog. Sa Android, ang pagpili ng AudioSource.MIC ay tinitiyak ang pag-capture mula sa pangunahing mikropono, at ang AudioSource.VOICE_COMMUNICATION ay nag-o-optimize ng pag-record para sa voice communication. Karagdagan, ang sampling frequency na 44100 Hz at PCM 16-bit na format ay maaaring i-configure upang makamit ang standard na CD quality.
Sa panahon ng pag-record ng audio, maaaring mangyari ang system interruptions: papasok na tawag, alarm, notification mula sa ibang app. Sa iOS, ang AVAudioSessionDelegate ay humahawak ng beginInterruption at endInterruption. Sa Android, ang AudioManager.OnAudioFocusChangeListener ay nagpapaalam sa app tungkol sa pagkawala o pagbalik ng audio focus. Ang wastong pangangasiwa ng mga pagkaantala ay nagbibigay-daan upang mapanatili ang recording sa mga hindi inaasahang pangyayari at maiwasan ang pagkawala ng data. Inirerekomenda na i-pause ang pag-record kapag nawala ang focus at ipagpatuloy pagkatapos ng pagbalik nito na may abiso sa user.
Pag-optimize ng audio capture ay kinabibilangan ng configuration ng sampling frequency, laki ng buffer, at encoding format. Para sa voice message, sapat na ang frequency na 44100 Hz at mono channel. Para sa speech recognition, maaaring kailanganin ang frequency na 16000 Hz.
Sa iOS, gamitin ang AVAudioSession.setPreferredIOBufferDuration para i-configure ang recording latency. Ang mas maliit na buffer ay nagbabawas ng latency ngunit nagpapataas ng CPU load. Sa Android, ang AudioRecord.getMinBufferSize ay nagbabalik ng minimum na laki ng buffer para sa mga tinukoy na parameter. Inirerekomenda na gumamit ng buffer na hindi bababa sa minimum na ito upang maiwasan ang pagkawala ng data sa panahon ng pag-record sa ilalim ng mataas na system load.
Pinakamahusay na kasanayan sa paggamit ng Microphone Permission ay naglalayong pataasin ang tiwala ng user at pagsunod sa mga kinakailangan ng platform.
Bago humingi ng Microphone Permission, magpakita ng screen na nagpapaliwanag kung bakit kailangan ng app ang mikropono at kung paano gagamitin ang recording. Ipahiwatig kung ang audio ay ipinapadala sa server o pinoproseso nang lokal. Ang mga user ay mas malamang na pumayag sa access kung naiintindihan nila na ang recording ay hindi umaalis sa device. Lokal na pagproseso (on-device ASR) ay isang malakas na argumento para sa tiwala.
Kung ang app ay hindi nangangailangan ng background audio recording, siguraduhing itigil ang mikropono kapag lumipat sa background mode. Ito ay hindi lamang nakakatipid ng baterya ngunit pumipigil din sa negatibong reaksyon ng user na nakakakita ng recording indicator. Sa iOS, gamitin ang mga metodo ng UIApplicationDelegate applicationDidEnterBackground para i-pause ang recording. Sa Android, pangasiwaan ang onPause at onStop sa Activity o Service.
Magpakita ng sarili mong recording indicator (animated microphone icon o wave) sa panahon ng audio capture. Ito ay nagpapaalam sa user na ang mikropono ay aktibo at nagbabawas ng panganib ng negatibong reaksyon. Apple at Google ay nagrerekomenda ng pagdoble ng system indicator gamit ang iyong sariling UI element para sa maximum na transparency.
Mga Madalas Itanong
Hindi, ang pahintulot ng mikropono ay kinakailangan lamang para sa pag-capture ng audio mula sa mikropono. Ang pag-play ng tunog sa pamamagitan ng speaker o headphone ay hindi nangangailangan ng Microphone Permission. Para sa pag-play, sapat na i-configure ang audio session sa iOS o AudioTrack sa Android.
Gamitin ang ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Ang metodo ay nagbabalik ng PackageManager.PERMISSION_GRANTED o PERMISSION_DENIED. Karagdagan, suriin kung ang mikropono ay available sa device sa pamamagitan ng PackageManager.hasSystemFeature.
Mag-alok ng alternatibong scenario: text input sa halip na boses, pagpapadala ng mensahe nang walang audio, panonood ng video nang walang tunog. Kung ang voice function ay kritikal, magpakita ng screen na may tagubilin para i-activate ang pahintulot sa system settings at button para mag-navigate.
Mula Android 12, ang app sa background ay hindi maaaring maka-access sa mikropono. Ang aktibong pag-record ay sinuspinde kapag lumipat sa background mode. Bukod pa rito, lumitaw ang Privacy Chip indicator — isang berdeng icon sa status bar na nagpapakita na ang app ay gumagamit ng mikropono.
Ang pinakakaraniwang dahilan: kawalan ng NSMicrophoneUsageDescription key, hindi tiyak na paglalarawan ng dahilan (“para sa pagpapabuti ng serbisyo” sa halip na “para sa pag-record ng voice message”), paghingi ng pahintulot nang walang malinaw na aksyon ng user o paggamit ng mikropono sa background nang walang makatuwirang functionality.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din