Microphone Permission — ini adalah izin sistem yang diperlukan aplikasi untuk mengakses mikrofon perangkat. Diperlukan untuk merekam audio, pesan suara, panggilan video, dan pengenalan suara. Menurut Apple Developer Documentation, 2024, semua aplikasi yang menggunakan pengambilan audio wajib meminta persetujuan eksplisit pengguna melalui dialog sistem.
Poin Utama
Microphone Permission adalah mekanisme perlindungan privasi yang mencegah perekaman audio tidak sah dari mikrofon perangkat. Platform seluler mengklasifikasikan mikrofon sebagai salah satu sumber daya paling sensitif, karena perekaman suara dapat menangkap percakapan pribadi, lingkungan sekitar, dan informasi rahasia.
Android mengklasifikasikan RECORD_AUDIO sebagai izin berbahaya, dan iOS mewajibkan penambahan kunci NSMicrophoneUsageDescription di Info.plist. Di kedua platform, permintaan dilakukan saat proses berjalan, dan pengguna dapat kapan saja mencabut izin melalui pengaturan sistem. Indikator sistem perekaman (titik oranye di iOS, indikator hijau di Android 12+) memberi sinyal kepada pengguna bahwa aplikasi saat ini menggunakan mikrofon.
Menurut penelitian Pew Research Center (2024), 54% pengguna perangkat seluler setidaknya sekali menolak akses mikrofon ke suatu aplikasi. Alasan utamanya adalah ketidakpahaman mengapa aplikasi memerlukan perekaman audio. Oleh karena itu, pengembang harus menjelaskan tujuan penggunaan mikrofon setransparan mungkin.
Izin mikrofon di Android diminta melalui deklarasi RECORD_AUDIO di manifes dan permintaan waktu proses di kode aplikasi. Mulai Android 10, akses ke mikrofon juga diatur oleh batasan untuk aplikasi latar belakang.
Langkah pertama adalah mendeklarasikan izin RECORD_AUDIO di file manifes. Tanpa deklarasi ini, permintaan waktu proses tidak akan berpengaruh dan aplikasi tidak akan mendapatkan akses ke mikrofon.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT adalah izin sistem yang tidak tersedia untuk aplikasi pihak ketiga. Ini hanya digunakan oleh aplikasi sistem untuk menangkap output audio. Aplikasi biasa hanya memerlukan RECORD_AUDIO untuk merekam dari mikrofon.
Setelah deklarasi di manifes, perlu dilakukan permintaan waktu proses. Mari kita lihat contoh penggunaan AudioRecord untuk merekam audio dari mikrofon.
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()
// Merekam data audio ke buffer
}
Penting untuk menangani siklus hidup perekaman audio dengan benar. Saat aplikasi beralih ke mode latar belakang di Android 9 dan lebih baru, perekaman dari mikrofon dapat ditangguhkan oleh sistem. Mulai Android 10, akses latar belakang ke mikrofon lebih dibatasi: aplikasi di latar belakang tidak dapat memulai perekaman, dan perekaman aktif ditangguhkan. Untuk perekaman latar belakang diperlukan MediaProjection atau Service dengan notifikasi.
Izin mikrofon di iOS dikonfigurasi melalui kunci NSMicrophoneUsageDescription di Info.plist dan pemanggilan metode AVAudioSession.requestRecordPermission. Apple mewajibkan pencantuman alasan penggunaan mikrofon di dialog permintaan.
Kunci NSMicrophoneUsageDescription wajib untuk aplikasi apa pun yang meminta akses ke mikrofon. Tanpanya, aplikasi akan crash saat mencoba merekam audio.
<key>NSMicrophoneUsageDescription</key>
<string>Aplikasi memerlukan akses ke mikrofon untuk merekam catatan suara dan mengirim pesan audio.</string>
Permintaan akses ke mikrofon di iOS dilakukan melalui AVAudioSession. Setelah menerima respons, aplikasi mengonfigurasi sesi audio dan memulai perekaman.
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)")
}
}
Di iOS 14 dan lebih baru, aplikasi yang menggunakan mikrofon menampilkan indikator oranye di bilah status. Pengguna melihat aplikasi mana yang saat ini merekam audio. Jika aplikasi menggunakan mikrofon di latar belakang tanpa alasan yang sah, Apple dapat menolak pembaruan. AVAudioSession memungkinkan konfigurasi kategori dan mode sesi audio, menentukan perilaku aplikasi saat beralih ke mode latar belakang.
Skenario penggunaan mikrofon di aplikasi seluler beragam: dari perekaman suara sederhana hingga pemrosesan aliran audio kompleks secara real-time.
Pengirim pesan dan aplikasi catatan menggunakan mikrofon untuk merekam pesan suara. Dalam hal ini, Microphone Permission diminta saat tombol rekam ditekan. Setelah perekaman selesai, penting untuk menghentikan sesi audio agar aplikasi lain dapat menggunakan mikrofon. AVAudioSession di iOS dan AudioManager di Android mengelola fokus audio.
Aplikasi dengan input suara (pencarian, dikte, asisten suara) menggunakan mikrofon bersama dengan API pengenalan suara. Di Android ini adalah SpeechRecognizer dari android.speech, di iOS — SFSpeechRecognizer dari Speech framework. Untuk pengenalan suara mungkin diperlukan izin tambahan untuk mengakses layanan pengenalan (SPEECH di Android, SFSpeechRecognizer.requestAuthorization di iOS).
Aplikasi panggilan video (WebRTC, Zoom, Telegram) meminta Microphone Permission bersamaan dengan Camera Permission. Dalam konteks ini, penting untuk meminta kedua izin secara berurutan, bukan bersamaan, agar pengguna tidak kewalahan dengan dialog. WebRTC menggunakan getUserMedia untuk menangkap audio dan video, tetapi di platform seluler diperlukan izin sistem terlebih dahulu.
Untuk perekaman berkualitas tinggi, diperlukan konfigurasi parameter sesi audio yang tepat. Di iOS, kategori .playAndRecord memungkinkan pemutaran dan perekaman suara secara bersamaan. Di Android, pemilihan AudioSource.MIC memastikan pengambilan dari mikrofon utama, dan AudioSource.VOICE_COMMUNICATION mengoptimalkan perekaman untuk komunikasi suara. Selain itu, frekuensi sampling 44100 Hz dan format PCM 16 bit dapat dikonfigurasi untuk mencapai kualitas CD standar.
Selama perekaman audio, interupsi sistem dapat terjadi: panggilan masuk, alarm, notifikasi dari aplikasi lain. Di iOS, AVAudioSessionDelegate menangani beginInterruption dan endInterruption. Di Android, AudioManager.OnAudioFocusChangeListener memberi tahu aplikasi tentang kehilangan atau pengembalian fokus audio. Penanganan interupsi yang benar memungkinkan perekaman tetap tersimpan saat kejadian tak terduga dan mencegah kehilangan data. Direkomendasikan untuk menjeda perekaman saat kehilangan fokus dan melanjutkannya setelah kembali dengan pemberitahuan kepada pengguna.
Optimasi pengambilan audio mencakup konfigurasi frekuensi sampling, ukuran buffer, dan format pengkodean. Untuk pesan suara, frekuensi 44100 Hz dan saluran mono sudah cukup. Untuk pengenalan suara, frekuensi 16000 Hz mungkin diperlukan.
Di iOS, gunakan AVAudioSession.setPreferredIOBufferDuration untuk mengonfigurasi latensi perekaman. Buffer yang lebih kecil mengurangi latensi tetapi meningkatkan beban prosesor. Di Android, AudioRecord.getMinBufferSize mengembalikan ukuran buffer minimum untuk parameter yang ditentukan. Disarankan untuk menggunakan buffer tidak lebih kecil dari minimum ini untuk mencegah kehilangan data selama perekaman dalam kondisi beban sistem tinggi.
Praktik terbaik bekerja dengan Microphone Permission bertujuan untuk meningkatkan kepercayaan pengguna dan kepatuhan terhadap persyaratan platform.
Sebelum meminta Microphone Permission, tampilkan layar yang menjelaskan mengapa aplikasi memerlukan mikrofon dan bagaimana rekaman akan digunakan. Tunjukkan apakah audio dikirim ke server atau diproses secara lokal. Pengguna jauh lebih mungkin menyetujui akses jika mereka memahami bahwa rekaman tidak meninggalkan perangkat. Pemrosesan lokal (on-device ASR) adalah argumen kuat untuk kepercayaan.
Jika aplikasi tidak memerlukan perekaman audio latar belakang, pastikan untuk menghentikan mikrofon saat beralih ke mode latar belakang. Ini tidak hanya menghemat baterai tetapi juga mencegah reaksi negatif pengguna yang melihat indikator perekaman. Di iOS, gunakan metode UIApplicationDelegate applicationDidEnterBackground untuk menjeda perekaman. Di Android, tangani onPause dan onStop di Activity atau Service.
Tampilkan indikator perekaman Anda sendiri (ikon mikrofon animasi atau gelombang) selama pengambilan audio. Ini memberi tahu pengguna bahwa mikrofon aktif dan mengurangi risiko reaksi negatif. Apple dan Google merekomendasikan menduplikasi indikator sistem dengan elemen UI Anda sendiri untuk transparansi maksimal.
Pertanyaan yang Sering Diajukan
Tidak, izin mikrofon hanya diperlukan untuk pengambilan audio dari mikrofon. Memutar suara melalui speaker atau headphone tidak memerlukan Microphone Permission. Untuk pemutaran, cukup mengonfigurasi sesi audio di iOS atau AudioTrack di Android.
Gunakan ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO). Metode ini mengembalikan PackageManager.PERMISSION_GRANTED atau PERMISSION_DENIED. Selain itu, periksa apakah mikrofon tersedia di perangkat melalui PackageManager.hasSystemFeature.
Tawarkan skenario alternatif: input teks sebagai pengganti suara, mengirim pesan tanpa audio, menonton video tanpa suara. Jika fungsi suara sangat penting, tampilkan layar dengan petunjuk untuk mengaktifkan izin di pengaturan sistem dan tombol navigasi.
Mulai Android 12, aplikasi di latar belakang tidak dapat mengakses mikrofon. Perekaman aktif dijeda saat beralih ke mode latar belakang. Selain itu, indikator Privacy Chip telah muncul — ikon hijau di bilah status yang menunjukkan bahwa aplikasi menggunakan mikrofon.
Alasan paling umum: tidak adanya kunci NSMicrophoneUsageDescription, deskripsi alasan yang tidak spesifik (“untuk meningkatkan layanan” alih-alih “untuk merekam pesan suara”), permintaan izin tanpa tindakan eksplisit pengguna, atau penggunaan mikrofon di latar belakang tanpa fungsionalitas yang dapat dibenarkan.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga