Microphone Permission — bu dasturning qurilma mikrofoniga kirishi uchun zarur bo‘lgan tizim ruxsatidir. Audio yozish, ovozli xabarlar yuborish, video qo‘ng‘iroqlar va nutqni aniqlash uchun talab qilinadi. Apple Developer Documentation, 2024 ma’lumotlariga ko‘ra, audio olishdan foydalanadigan barcha ilovalar tizim muloqot oynasi orqali foydalanuvchining aniq roziligini so‘rashi shart.
Asosiy ma’lumotlar
Microphone Permission — bu qurilma mikrofonidan ruxsatsiz audio yozilishining oldini oluvchi maxfiylikni himoya qilish mexanizmidir. Mobil platformalar mikrofoni eng nozik resurslardan biri deb hisoblaydi, chunki ovoz yozuvi shaxsiy suhbatlar, atrof-muhit va maxfiy ma’lumotlarni egallashi mumkin.
Android RECORD_AUDIO ni xavfli ruxsat sifatida tasniflaydi, iOS esa Info.plist da NSMicrophoneUsageDescription kalitini majburiy qo‘shishni talab qiladi. Ikkala platformada so‘rov ish vaqtida amalga oshiriladi va foydalanuvchi istalgan vaqtda tizim sozlamalari orqali ruxsatni bekor qilishi mumkin. Tizim ko‘rsatkichi (iOS da to‘q sariq nuqta, Android 12+ da yashil ko‘rsatkich) foydalanuvchiga dastur hozirda mikrofondan foydalanayotganligini bildiradi.
Pew Research Center (2024) tadqiqotiga ko‘ra, mobil qurilma foydalanuvchilarining 54 foizi kamida bir marta dasturga mikrofon kirishini rad etgan. Asosiy sabab — dastur nima uchun audio yozishga muhtojligini tushunmaslikdir. Shu sababli dasturchi mikrofonni ishlatish maqsadini imkon qadar shaffof tarzda tushuntirishi kerak.
Android da mikrofon ruxsati manifestda RECORD_AUDIO ni e’lon qilish va dastur kodida ish vaqti so‘rovi orqali so‘raladi. Android 10 dan boshlab, mikrofon kirishi qo‘shimcha ravishda fon ilovalari uchun cheklovlar bilan tartibga solinadi.
Birinchi qadam — manifest faylida RECORD_AUDIO ruxsatini e’lon qilishdir. Bu e’lonsiz ish vaqti so‘rovi samarali bo‘lmaydi va dastur mikrofon kirishini ololmaydi.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT — bu uchinchi tomon ilovalari uchun mavjud bo‘lmagan tizim ruxsatidir. Faqat tizim ilovalari tomonidan audio chiqishini olish uchun ishlatiladi. Oddiy ilovalar mikrofondan yozish uchun faqat RECORD_AUDIO ga muhtoj.
Manifestda e’londan so‘ng ish vaqti so‘rovini amalga oshirish kerak. AudioRecord yordamida mikrofondan audio yozish misolini ko‘rib chiqamiz.
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()
// Audio ma'lumotlarni buferga yozish
}
Audio yozish hayotiy siklini to‘g‘ri boshqarish muhimdir. Dastur Android 9 va undan yuqori versiyalarda fon rejimiga o‘tganda, mikrofondan yozish tizim tomonidan to‘xtatilishi mumkin. Android 10 dan boshlab, fonda mikrofon kirishi qo‘shimcha cheklangan: fondagi dastur yozishni boshlay olmaydi va faol yozish to‘xtatiladi. Fonda yozish uchun MediaProjection yoki bildirishnoma bilan Service talab qilinadi.
iOS da mikrofon ruxsati Info.plist da NSMicrophoneUsageDescription kaliti va AVAudioSession.requestRecordPermission metodini chaqirish orqali sozlanadi. Apple so‘rov muloqot oynasida mikrofondan foydalanish sababini majburiy ko‘rsatishni talab qiladi.
NSMicrophoneUsageDescription kaliti mikrofon kirishini so‘raydigan har qanday dastur uchun majburiydir. Busiz dastur audio yozishga urinishda ishdan chiqadi.
<key>NSMicrophoneUsageDescription</key>
<string>Ilova ovozli eslatmalarni yozish va audio xabarlarni yuborish uchun mikrofon kirishiga muhtoj.</string>
iOS da mikrofon kirish so‘rovi AVAudioSession orqali amalga oshiriladi. Javob olingandan so‘ng dastur audio sessiyani sozlaydi va yozishni boshlaydi.
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 va undan yuqori versiyalarda mikrofondan foydalanadigan dastur holat satrida to‘q sariq ko‘rsatkichni ko‘rsatadi. Foydalanuvchi hozirda qaysi dastur audio yozayotganini ko‘radi. Agar dastur asosli sababsiz fonda mikrofondan foydalansa, Apple yangilanishni rad etishi mumkin. AVAudioSession audio sessiya kategoriyasi va rejimini sozlashga, dasturning fon rejimiga o‘tishdagi xatti-harakatini aniqlashga imkon beradi.
Mikrofondan foydalanish stsenariylari mobil ilovalarda xilma-xildir: oddiy ovoz yozishdan real vaqtda murakkab audio oqimini qayta ishlashgacha.
Messengerlar va eslatma ilovalari ovozli xabarlarni yozish uchun mikrofondan foydalanadi. Bu holda Microphone Permission yozish tugmasi bosilganda so‘raladi. Yozish tugagandan so‘ng audio sessiyani to‘xtatish muhimdir, shunda boshqa dasturlar mikrofondan foydalanishi mumkin. iOS da AVAudioSession va Android da AudioManager audio fokusni boshqaradi.
Ovozli kiritishga ega dasturlar (qidirish, diktant, ovozli yordamchilar) mikrofondan nutqni aniqlash API si bilan birga foydalanadi. Android da bu SpeechRecognizer android.speech dan, iOS da — SFSpeechRecognizer Speech framework dan. Nutqni aniqlash uchun aniqlash xizmatlariga kirish uchun qo‘shimcha ruxsat talab qilinishi mumkin (Android da SPEECH, iOS da SFSpeechRecognizer.requestAuthorization).
Video qo‘ng‘iroq dasturlari (WebRTC, Zoom, Telegram) Microphone Permission ni Camera Permission bilan bir vaqtda so‘raydi. Bu kontekstda ikkala ruxsatni bir vaqtning o‘zida emas, balki ketma-ket so‘rash muhimdir, chunki foydalanuvchi muloqot oynalari bilan ortiqcha yuklanmasligi kerak. WebRTC audio va video olish uchun getUserMedia dan foydalanadi, ammo mobil platformalarda oldindan tizim ruxsatlari talab qilinadi.
Sifatli yozish uchun audio sessiya parametrlarini to‘g‘ri sozlash talab qilinadi. iOS da .playAndRecord kategoriyasi bir vaqtning o‘zida ovozni ijro etish va yozish imkonini beradi. Android da AudioSource.MIC tanlovi asosiy mikrofondan olishni ta’minlaydi, AudioSource.VOICE_COMMUNICATION esa yozishni ovozli aloqa uchun optimallashtiradi. Qo‘shimcha ravishda, standart CD sifatiga erishish uchun 44100 Gts namuna olish chastotasi va PCM 16 bit formati sozlanishi mumkin.
Audio yozish paytida tizim uzilishlari yuz berishi mumkin: kiruvchi qo‘ng‘iroq, budilnik, boshqa dasturdan bildirishnoma. iOS da AVAudioSessionDelegate beginInterruption va endInterruption ni boshqaradi. Android da AudioManager.OnAudioFocusChangeListener dasturga audio fokusni yo‘qotish yoki qaytarish haqida xabar beradi. Uzilishlarni to‘g‘ri boshqarish kutilmagan hodisalarda yozishni saqlash va ma’lumot yo‘qotilishining oldini olish imkonini beradi. Fokus yo‘qolganda yozishni to‘xtatish va qaytgach, foydalanuvchini xabardor qilgan holda davom ettirish tavsiya etiladi.
Audio olishni optimallashtirish namuna olish chastotasi, bufer hajmi va kodlash formatini sozlashni o‘z ichiga oladi. Ovozli xabarlar uchun 44100 Gts chastota va mono kanal etarli. Nutqni aniqlash uchun 16000 Gts chastota talab qilinishi mumkin.
iOS da yozish kechikishini sozlash uchun AVAudioSession.setPreferredIOBufferDuration dan foydalaning. Kichik bufer kechikishni kamaytiradi, ammo protsessor yukini oshiradi. Android da AudioRecord.getMinBufferSize berilgan parametrlar uchun minimal bufer hajmini qaytaradi. Tizim yuqori yuklangan sharoitda yozish paytida ma’lumot yo‘qotilishining oldini olish uchun ushbu minimaldan kam bo‘lmagan buferdan foydalanish tavsiya etiladi.
Eng yaxshi amaliyotlar Microphone Permission bilan ishlash foydalanuvchi ishonchini oshirish va platforma talablariga muvofiqlikni ta’minlashga qaratilgan.
Microphone Permission so‘rashdan oldin dasturning nima uchun mikrofonga muhtojligini va yozish qanday ishlatilishini tushuntiruvchi ekranni ko‘rsating. Ovozning serverga yuboriladimi yoki mahalliy qayta ishlanishini ko‘rsating. Foydalanuvchilar yozish qurilmadan chiqib ketmasligini tushunsalar, kirishga ko‘proq rozilik beradilar. Mahalliy qayta ishlash (on-device ASR) ishonch uchun kuchli dalildir.
Agar dastur fonda audio yozishni talab qilmasa, fon rejimiga o‘tganda mikrofonni albatta to‘xtating. Bu nafaqat batareyani tejaydi, balki yozish ko‘rsatkichini ko‘rgan foydalanuvchining salbiy munosabatining oldini oladi. iOS da yozishni to‘xtatish uchun UIApplicationDelegate ning applicationDidEnterBackground metodlaridan foydalaning. Android da Activity yoki Service da onPause va onStop ni boshqaring.
Audio olish paytida o‘z yozish ko‘rsatkichingizni (animatsiyali mikrofon belgisi yoki to‘lqin) ko‘rsating. Bu foydalanuvchiga mikrofonning faolligi haqida xabar beradi va salbiy munosabat xavfini kamaytiradi. Apple va Google maksimal shaffoflik uchun tizim ko‘rsatkichini o‘z UI elementingiz bilan takrorlashni tavsiya qiladi.
Tez-tez beriladigan savollar
Yo‘q, mikrofon ruxsati faqat mikrofondan audio olish uchun talab qilinadi. Ovozni karnay yoki eshitish vositasi orqali ijro etish Microphone Permission ni talab qilmaydi. Ijro etish uchun iOS da audio sessiyani yoki Android da AudioTrack ni sozlash kifoya.
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) dan foydalaning. Metod PackageManager.PERMISSION_GRANTED yoki PERMISSION_DENIED qaytaradi. Qo‘shimcha ravishda, PackageManager.hasSystemFeature orqali qurilmada mikrofon mavjudligini tekshiring.
Muqobil stsenariyni taklif qiling: ovozli o‘rniga matn kiritish, audiosiz xabar yuborish, tovushsiz video tomosha qilish. Agar ovozli funksiya muhim bo‘lsa, tizim sozlamalarida ruxsatni yoqish bo‘yicha ko‘rsatma va o‘tish tugmasi bo‘lgan ekranni ko‘rsating.
Android 12 dan boshlab, fondagi dastur mikrofon kirishini ololmaydi. Faol yozish fon rejimiga o‘tganda to‘xtatiladi. Bundan tashqari, Privacy Chip ko‘rsatkichi — holat satrida dasturning mikrofondan foydalanayotganini ko‘rsatuvchi yashil belgi paydo bo‘ldi.
Eng keng tarqalgan sabablar: NSMicrophoneUsageDescription kalitining yo‘qligi, sababning noaniq tavsifi (“ovozli xabarlarni yozish” o‘rniga “xizmatni yaxshilash uchun”), foydalanuvchining aniq harakatisiz ruxsat so‘rovi yoki asosli funksionalliksiz fonda mikrofondan foydalanish.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.