Microphone Permission — bu proqramın cihazın mikrofonuna daxil olması üçün zəruri olan sistem icazəsidir. Audio yazmaq, səsli mesajlar göndərmək, video zənglər etmək və nitqin tanınması üçün tələb olunur. Apple Developer Documentation, 2024-ə əsasən, audio tutma istifadə edən bütün proqramlar sistem dialoqu vasitəsilə istifadəçinin açıq razılığını istəməlidir.
Əsas məqamlar
Microphone Permission — cihazın mikrofonundan icazəsiz audio yazılmasının qarşısını alan məxfilik mühafizə mexanizmidir. Mobil platformalar mikrofonu ən həssas resurslardan biri hesab edir, çünki səs yazısı şəxsi söhbətləri, ətraf mühiti və məxfi məlumatları ələ keçirə bilər.
Android RECORD_AUDIO-nu təhlükəli icazə kimi təsnif edir, iOS isə Info.plist-də NSMicrophoneUsageDescription açarının məcburi əlavə edilməsini tələb edir. Hər iki platformada sorğu iş vaxtı yerinə yetirilir və istifadəçi istənilən vaxt sistem parametrləri vasitəsilə icazəni geri ala bilər. Sistem göstəricisi (iOS-da narıncı nöqtə, Android 12+-da yaşıl göstərici) istifadəçiyə proqramın hazırda mikrofondan istifadə etdiyini bildirir.
Pew Research Center (2024) tədqiqatına görə, mobil cihaz istifadəçilərinin 54%-i ən azı bir dəfə proqrama mikrofon girişini rədd edib. Əsas səbəb — proqramın niyə audio yazmağa ehtiyacı olduğunu anlamamalarıdır. Buna görə də tərtibatçı mikrofonun istifadə məqsədini mümkün qədər şəffaf şəkildə izah etməlidir.
Android-də mikrofon icazəsi manifestdə RECORD_AUDIO-nun bəyan edilməsi və proqram kodunda iş vaxtı sorğusu vasitəsilə tələb olunur. Android 10-dan başlayaraq, mikrofon girişi əlavə olaraq fon proqramları üçün məhdudiyyətlərlə tənzimlənir.
İlk addım — manifest faylında RECORD_AUDIO icazəsini bəyan etməkdir. Bu bəyannamə olmadan iş vaxtı sorğusu effektiv olmayacaq və proqram mikrofon girişini əldə edə bilməyəcək.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT üçüncü tərəf proqramları üçün əlçatmaz olan sistem icazəsidir. Yalnız sistem proqramları tərəfindən audio çıxışını tutmaq üçün istifadə olunur. Adi proqramlar mikrofonla yazmaq üçün yalnız RECORD_AUDIO-ya ehtiyac duyur.
Manifestdə bəyannamədən sonra iş vaxtı sorğusunu yerinə yetirmək lazımdır. AudioRecord-dan istifadə edərək mikrofonla audio yazma nümunəsinə baxaq.
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 məlumatların buferə yazılması
}
Audio yazma həyat dövrünü düzgün idarə etmək vacibdir. Proqram Android 9 və daha yuxarı versiyalarda fon rejiminə keçdikdə, mikrofonla yazma sistem tərəfindən dayandırıla bilər. Android 10-dan başlayaraq, fonda mikrofon girişi əlavə olaraq məhdudlaşdırılıb: fon proqramı yazmağa başlaya bilməz, aktiv yazma isə dayandırılır. Fonda yazmaq üçün MediaProjection və ya bildirişli Service tələb olunur.
iOS-da mikrofon icazəsi Info.plist-də NSMicrophoneUsageDescription açarı və AVAudioSession.requestRecordPermission metodunun çağırışı vasitəsilə konfiqurasiya edilir. Apple sorğu dialoqunda mikrofonun istifadə səbəbinin məcburi göstərilməsini tələb edir.
NSMicrophoneUsageDescription açarı mikrofon girişi tələb edən istənilən proqram üçün məcburidir. Olmadan proqram audio yazma cəhdində qəzaya uğrayacaq.
<key>NSMicrophoneUsageDescription</key>
<string>Proqramın səsli qeydlər yazmaq və audio mesajlar göndərmək üçün mikrofon girişinə ehtiyacı var.</string>
iOS-da mikrofon girişi sorğusu AVAudioSession vasitəsilə yerinə yetirilir. Cavab alındıqdan sonra proqram audio sessiyanı konfiqurasiya edir və yazmağa başlayır.
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 və daha yuxarı versiyalarda mikrofondan istifadə edən proqram status çubuğunda narıncı göstərici göstərir. İstifadəçi hazırda hansı proqramın audio yazdığını görür. Proqram əsaslandırılmış səbəb olmadan fonda mikrofondan istifadə edərsə, Apple yeniləməni rədd edə bilər. AVAudioSession audio sessiyanın kateqoriyasını və rejimini konfiqurasiya etməyə, proqramın fon rejiminə keçərkən davranışını təyin etməyə imkan verir.
Mikrofon istifadə ssenariləri mobil proqramlarda müxtəlifdir: sadə səs yazısından real vaxtda mürəkkəb audio axını emalına qədər.
Messencerlər və qeyd proqramları səsli mesaj yazmaq üçün mikrofondan istifadə edir. Bu halda Microphone Permission yazma düyməsi basıldıqda tələb olunur. Yazma bitdikdən sonra audio sessiyanı dayandırmaq vacibdir ki, digər proqramlar mikrofondan istifadə edə bilsin. AVAudioSession iOS-da və AudioManager Android-də audio fokusu idarə edir.
Səsli girişi olan proqramlar (axtarış, diktə, səsli köməkçilər) mikrofondan nitqin tanınması API-si ilə birlikdə istifadə edir. Android-də bu SpeechRecognizer android.speech-dən, iOS-da — SFSpeechRecognizer Speech framework-dən. Nitqin tanınması üçün tanınma xidmətlərinə giriş üçün əlavə icazə tələb oluna bilər (Android-də SPEECH, iOS-da SFSpeechRecognizer.requestAuthorization).
Video zəng proqramları (WebRTC, Zoom, Telegram) Microphone Permission ilə yanaşı Camera Permission tələb edir. Bu kontekstdə hər iki icazəni eyni anda deyil, ardıcıl olaraq tələb etmək vacibdir ki, istifadəçi dialoqlarla yüklənməsin. WebRTC audio və video tutmaq üçün getUserMedia-dan istifadə edir, lakin mobil platformalarda əvvəlcədən sistem icazələri tələb olunur.
Keyfiyyətli yazmaq üçün audio sessiya parametrlərini düzgün konfiqurasiya etmək tələb olunur. iOS-da .playAndRecord kateqoriyası eyni vaxtda səsi oxutmağa və yazmağa imkan verir. Android-də AudioSource.MIC seçimi əsas mikrofondan tutmağı təmin edir, AudioSource.VOICE_COMMUNICATION isə yazmanı səsli rabitə üçün optimallaşdırır. Əlavə olaraq, standart CD keyfiyyətinə nail olmaq üçün 44100 Hz seçmə tezliyi və PCM 16 bit formatı konfiqurasiya edilə bilər.
Audio yazma zamanı sistem kəsilmələri baş verə bilər: daxil olan zəng, həyəcan siqnalı, başqa proqramdan bildiriş. iOS-da AVAudioSessionDelegate beginInterruption və endInterruption-ı idarə edir. Android-də AudioManager.OnAudioFocusChangeListener proqrama audio fokusun itirilməsi və ya qaytarılması barədə məlumat verir. Kəsilmələrin düzgün idarə edilməsi gözlənilməz hadisələr zamanı yazmanı qorumağa və məlumat itkisinin qarşısını almağa imkan verir. Fokus itkisində yazmanı dayandırmaq və qayıtdıqdan sonra istifadəçiyə məlumat verərək bərpa etmək tövsiyə olunur.
Audio tutmanın optimallaşdırılması seçmə tezliyinin, bufer ölçüsünün və kodlaşdırma formatının konfiqurasiyasını əhatə edir. Səsli mesajlar üçün 44100 Hz tezlik və mono kanal kifayətdir. Nitqin tanınması üçün 16000 Hz tezlik tələb oluna bilər.
iOS-da yazma gecikməsini konfiqurasiya etmək üçün AVAudioSession.setPreferredIOBufferDuration-dan istifadə edin. Kiçik bufer gecikməni azaldır, lakin prosessora yükü artırır. Android-də AudioRecord.getMinBufferSize verilmiş parametrlər üçün minimum bufer ölçüsünü qaytarır. Sistem yüksək yüklü şəraitdə yazma zamanı məlumat itkisinin qarşısını almaq üçün bu minimumdan az olmayan buferdən istifadə etmək tövsiyə olunur.
Ən yaxşı təcrübələr Microphone Permission ilə işləmək istifadəçi etibarını artırmağa və platforma tələblərinə uyğunluğu təmin etməyə yönəlib.
Microphone Permission tələb etməzdən əvvəl proqramın niyə mikrofona ehtiyacı olduğunu və yazmanın necə istifadə ediləcəyini izah edən ekran göstərin. Audionun serverə ötürülüb-ötürülmədiyini və ya lokal emal edildiyini qeyd edin. İstifadəçilər yazmanın cihazı tərk etmədiyini başa düşdükdə girişə daha tez-tez razılıq verirlər. Lokal emal (on-device ASR) etibar üçün güclü arqumentdir.
Proqram fonda audio yazma tələb etmirsə, fon rejiminə keçərkən mikrofonu mütləq dayandırın. Bu təkcə batareyaya qənaət etmir, həm də yazma göstəricisini görən istifadəçinin mənfi reaksiyasının qarşısını alır. iOS-da yazmanı dayandırmaq üçün UIApplicationDelegate-in applicationDidEnterBackground metodlarından istifadə edin. Android-də Activity və ya Service-də onPause və onStop-u idarə edin.
Audio tutma zamanı öz yazma göstəricinizi (animasiyalı mikrofon ikonu və ya dalğa) göstərin. Bu, istifadəçiyə mikrofonun aktiv olduğu barədə məlumat verir və mənfi reaksiya riskini azaldır. Apple və Google maksimum şəffaflıq üçün sistem göstəricisini öz UI elementinizlə təkrarlamağı tövsiyə edir.
Tez-tez verilən suallar
Xeyr, mikrofon icazəsi yalnız mikrofondan audio tutmaq üçün tələb olunur. Dinamik və ya qulaqlıq vasitəsilə səsi oxutmaq Microphone Permission tələb etmir. Oxutmaq üçün iOS-da audio sessiyanı və ya Android-də AudioTrack-i konfiqurasiya etmək kifayətdir.
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) istifadə edin. Metod PackageManager.PERMISSION_GRANTED və ya PERMISSION_DENIED qaytarır. Əlavə olaraq, PackageManager.hasSystemFeature vasitəsilə cihazda mikrofonun mövcud olub-olmadığını yoxlayın.
Alternativ ssenari təklif edin: səsli əvəzinə mətn daxiletmə, audiosuz mesaj göndərmə, səssiz video izləmə. Əgər səsli giriş funksiyası vacibdirsə, sistem parametrlərində icazəni aktivləşdirmək üçün təlimat və keçid düyməsi olan ekran göstərin.
Android 12-dən başlayaraq, fonda olan proqram mikrofon girişini əldə edə bilməz. Aktiv yazma fon rejiminə keçərkən dayandırılır. Bundan əlavə, Privacy Chip göstəricisi — status çubuğunda proqramın mikrofondan istifadə etdiyini göstərən yaşıl ikon meydana çıxdı.
Ən çox rast gəlinən səbəblər: NSMicrophoneUsageDescription açarının olmaması, qeyri-spesifik səbəb təsviri ("səsli mesaj yazmaq" əvəzinə "xidməti yaxşılaşdırmaq üçün"), istifadəçinin aşkar hərəkəti olmadan icazə tələbi və ya əsaslandırılmış funksionallıq olmadan fonda mikrofondan istifadə etmək.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun