Microphone Permission, bir uygulamanın cihaz mikrofonuna erişmesi için gerekli olan bir sistem iznidir. Ses kaydı, sesli mesajlar, görüntülü aramalar ve konuşma tanıma için gereklidir. Apple Developer Documentation, 2024'e göre, ses yakalama kullanan tüm uygulamalar, bir sistem diyalogu aracılığıyla kullanıcının açık onayını almak zorundadır.
Önemli Noktalar
Microphone Permission, cihazın mikrofonundan yetkisiz ses kaydını önleyen bir gizlilik koruma mekanizmasıdır. Mobil platformlar, mikrofonu en hassas kaynaklardan biri olarak kabul eder çünkü ses kaydı kişisel konuşmaları, çevredeki ortamı ve gizli bilgileri yakalayabilir.
Android, RECORD_AUDIO'yu tehlikeli bir izin olarak sınıflandırır ve iOS, Info.plist'e NSMicrophoneUsageDescription anahtarının zorunlu olarak eklenmesini gerektirir. Her iki platformda da talep çalışma zamanında yapılır ve kullanıcı izni sistem ayarları aracılığıyla istediği zaman iptal edebilir. Sistem kayıt göstergesi (iOS'ta turuncu nokta, Android 12+'da yeşil gösterge), kullanıcıya uygulamanın o anda mikrofonu kullandığını bildirir.
Pew Research Center (2024) tarafından yapılan bir araştırmaya göre, mobil cihaz kullanıcılarının %54'ü en az bir kez bir uygulamanın mikrofon erişimini reddetmiştir. Ana neden, uygulamanın neden ses kaydına ihtiyaç duyduğunu anlamamaktır. Bu nedenle, geliştiricinin mikrofon kullanım amacını mümkün olduğunca şeffaf bir şekilde açıklaması gerekir.
Android'de mikrofon izni, manifest'te RECORD_AUDIO bildirilerek ve uygulama kodunda çalışma zamanı talebi yapılarak istenir. Android 10'dan itibaren mikrofon erişimi, arka plan uygulamaları için kısıtlamalarla ek olarak düzenlenir.
İlk adım, manifest dosyasında RECORD_AUDIO iznini bildirmektir. Bu bildirim olmadan, çalışma zamanı talebinin bir etkisi olmaz ve uygulama mikrofonua erişemez.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
CAPTURE_AUDIO_OUTPUT, üçüncü taraf uygulamalar için kullanılamayan bir sistem iznidir. Yalnızca sistem uygulamaları tarafından ses çıkışını yakalamak için kullanılır. Normal uygulamaların mikrofon kaydı için yalnızca RECORD_AUDIO'ya ihtiyacı vardır.
Manifest'te bildirimden sonra, çalışma zamanı talebi yapmak gerekir. Mikrofondan ses kaydetmek için AudioRecord kullanan bir örneği inceleyelim.
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()
// Ses verilerini arabelleğe kaydetme
}
Ses kaydı yaşam döngüsünü doğru şekilde yönetmek önemlidir. Android 9 ve üzerinde uygulama arka plana geçtiğinde, mikrofon kaydı sistem tarafından duraklatılabilir. Android 10'dan itibaren, arka plan mikrofon erişimi ek olarak kısıtlanmıştır: arka plandaki bir uygulama kayıt başlatamaz ve aktif kayıt duraklatılır. Arka plan kaydı için MediaProjection veya bildirimli bir Service gereklidir.
iOS'ta mikrofon izni, Info.plist'te NSMicrophoneUsageDescription anahtarı ve AVAudioSession.requestRecordPermission yöntemi çağrısı aracılığıyla yapılandırılır. Apple, talep diyalogunda mikrofon kullanım nedeninin zorunlu olarak açıklanmasını gerektirir.
NSMicrophoneUsageDescription anahtarı, mikrofon erişimi talep eden her uygulama için zorunludur. Bu anahtar olmadan, uygulama ses kaydetmeye çalıştığında çökecektir.
<key>NSMicrophoneUsageDescription</key>
<string>Uygulamanın sesli notlar kaydetmek ve sesli mesajlar göndermek için mikrofon erişimine ihtiyacı var.</string>
iOS'ta mikrofon erişimi talebi AVAudioSession aracılığıyla yapılır. Yanıt alındıktan sonra, uygulama ses oturumunu yapılandırır ve kayda başlar.
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 ve üzerinde, mikrofon kullanan bir uygulama durum çubuğunda turuncu bir gösterge görüntüler. Kullanıcı, hangi uygulamanın o anda ses kaydettiğini görebilir. Uygulama geçerli bir neden olmadan arka planda mikrofon kullanırsa, Apple güncellemeyi reddedebilir. AVAudioSession, ses oturumunun kategorisini ve modunu yapılandırmanıza olanak tanır ve arka plana geçerken uygulamanın davranışını belirler.
Mobil uygulamalarda mikrofon kullanım senaryoları çeşitlidir: basit ses kaydından gerçek zamanlı karmaşık ses akışı işlemeye kadar.
Mesajlaşma ve not alma uygulamaları, sesli mesajları kaydetmek için mikrofonu kullanır. Bu durumda, kayıt düğmesine basıldığında Microphone Permission talep edilir. Kayıt tamamlandıktan sonra, diğer uygulamaların mikrofonu kullanabilmesi için ses oturumunu durdurmak önemlidir. iOS'ta AVAudioSession ve Android'de AudioManager ses odağını yönetir.
Ses girişi olan uygulamalar (arama, dikte, sesli asistanlar), konuşma tanıma API'leri ile birlikte mikrofonu kullanır. Android'de bu, android.speech'ten SpeechRecognizer, iOS'ta — Speech framework'ünden SFSpeechRecognizer'dır. Konuşma tanıma, tanıma hizmetleri için ek izin gerektirebilir (Android'de SPEECH, iOS'ta SFSpeechRecognizer.requestAuthorization).
Görüntülü arama uygulamaları (WebRTC, Zoom, Telegram), Camera Permission ile birlikte Microphone Permission talep eder. Bu bağlamda, kullanıcının diyaloglarla boğulmaması için her iki izni aynı anda değil, sırayla talep etmek önemlidir. WebRTC, ses ve video yakalama için getUserMedia kullanır, ancak mobil platformlarda önce sistem izinleri gereklidir.
Kaliteli kayıt için ses oturumu parametrelerini doğru yapılandırmak gerekir. iOS'ta .playAndRecord kategorisi, aynı anda ses çalma ve kaydetmeye olanak tanır. Android'de AudioSource.MIC seçimi ana mikrofondan yakalama sağlarken, AudioSource.VOICE_COMMUNICATION sesli iletişim için kaydı optimize eder. Ayrıca, standart CD kalitesi için 44100 Hz örnekleme hızı ve PCM 16 bit formatı ayarlanabilir.
Ses kaydı sırasında sistem kesintileri oluşabilir: gelen arama, alarm etkinleştirme, başka bir uygulamadan bildirim. iOS'ta AVAudioSessionDelegate, beginInterruption ve endInterruption'ı işler. Android'de AudioManager.OnAudioFocusChangeListener, uygulamaya ses odağının kaybı veya iadesi hakkında bildirimde bulunur. Doğru kesinti yönetimi, beklenmedik olaylar sırasında kaydı kaydetmeye ve veri kaybını önlemeye olanak tanır. Odak kaybedildiğinde kaydı duraklatmak ve odağın geri dönüşünden sonra kullanıcıya bildirimde bulunarak devam etmek önerilir.
Ses yakalama optimizasyonu, örnekleme hızı, arabellek boyutu ve kodlama formatının yapılandırılmasını içerir. Sesli mesajlar için 44100 Hz frekansı ve mono kanal yeterlidir. Konuşma tanıma için 16000 Hz frekansı gerekebilir.
iOS'ta, kayıt gecikmesini yapılandırmak için AVAudioSession.setPreferredIOBufferDuration kullanın. Daha küçük bir arabellek gecikmeyi azaltır ancak CPU yükünü artırır. Android'de, AudioRecord.getMinBufferSize belirtilen parametreler için minimum arabellek boyutunu döndürür. Yüksek sistem yükü altında kayıt yaparken veri kaybını önlemek için bu minimumdan daha küçük olmayan bir arabellek kullanılması önerilir.
En iyi uygulamalar, kullanıcı güvenini artırmayı ve platform gereksinimlerini karşılamayı amaçlar.
Microphone Permission talep etmeden önce, uygulamanın neden mikrofona ihtiyacı olduğunu ve kaydın nasıl kullanılacağını açıklayan bir ekran gösterin. Sesin sunucuya mı gönderildiğini yoksa yerel olarak mı işlendiğini belirtin. Kaydın cihazdan ayrılmadığını anlarlarsa, kullanıcılar erişime izin vermeye önemli ölçüde daha yatkındır. Yerel işleme (cihaz içi ASR) güven için güçlü bir argümandır.
Uygulama arka plan ses kaydı gerektirmiyorsa, arka plana geçerken mikrofonu durdurduğunuzdan emin olun. Bu yalnızca pil tasarrufu sağlamakla kalmaz, aynı zamanda kullanıcının kayıt göstergesini görmesi durumunda oluşabilecek olumsuz tepkiyi de önler. iOS'ta, kaydı duraklatmak için UIApplicationDelegate yöntemleri applicationDidEnterBackground'ı kullanın. Android'de, Activity veya Service'te onPause ve onStop'u işleyin.
Ses yakalama sırasında kendi kayıt göstergenizi (canlandırılmış mikrofon simgesi veya dalga formu) gösterin. Bu, kullanıcıya mikrofonun aktif olduğunu bildirir ve olumsuz tepki riskini azaltır. Apple ve Google, maksimum şeffaflık için sistem göstergesini kendi UI öğenizle çoğaltmanızı önerir.
Sıkça Sorulan Sorular
Hayır, mikrofon izni yalnızca mikrofondan ses yakalamak için gereklidir. Hoparlör veya kulaklık aracılığıyla ses çalmak Microphone Permission gerektirmez. Çalma için, iOS'ta ses oturumunu veya Android'de AudioTrack'i yapılandırmak yeterlidir.
ContextCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) kullanın. Yöntem, PackageManager.PERMISSION_GRANTED veya PERMISSION_DENIED döndürür. Ayrıca, PackageManager.hasSystemFeature aracılığıyla cihazda mikrofonun mevcut olup olmadığını kontrol edin.
Alternatif bir senaryo sunun: ses yerine metin girişi, ses olmadan mesaj gönderme, sessiz video izleme. Ses girişi özelliği kritikse, sistem ayarlarında izni etkinleştirme talimatları ve oraya gitmek için bir düğme içeren bir ekran gösterin.
Android 12'den itibaren, arka plandaki bir uygulama mikrofonua erişemez. Arka plana geçildiğinde aktif kayıt duraklatılır. Ayrıca, Privacy Chip göstergesi ortaya çıkmıştır — durum çubuğunda bir uygulamanın mikrofonu kullandığını gösteren yeşil bir simge.
En yaygın nedenler: NSMicrophoneUsageDescription anahtarının eksikliği, spesifik olmayan neden açıklaması (“sesli mesaj kaydetmek için” yerine “hizmeti iyileştirmek için”), açık kullanıcı eylemi olmadan izin talep etme veya gerekçelendirilmiş işlevsellik olmadan arka planda mikrofon kullanma.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun