はじめに
AndroidのSpeech Recognizerを利用して音声認識機能を実装する際、音声認識の開始を示すための"ピロン"や"ポロン"といった通知音が自動的に鳴ることがある。これらの音はシステムによって生成されるため、通知音を無効にしてSpeech Recognizerを実行する直接的な方法は存在しない。
しかし、この通知音が頻繁に鳴り、場合によっては邪魔になることもあります。実装したい機能によっては、音を一時的にミュートしたい状況が生じるかもしれない。最近のAndroidバージョンでは、adjustStreamVolume
メソッドを用いて通知音をミュートするのが良いようだ。 今回の内容はAndroid 9で動作確認した。
adjustStreamVolumeを使用して音声認識の通知音をミュートする
adjustStreamVolume
を使用する場合、特に問題なく通知音をミュートすることができる。
val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
// 通知音をミュート
audioManager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_MUTE, 0)
// ミュートを解除
audioManager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_UNMUTE, 0)
参考資料
getStreamVolumeを使用して通知音をミュートしようとすると失敗する
getStreamVolume
を使用してAudioManager.STREAM_NOTIFICATION
のボリュームを0に設定しようとすると、java.lang.SecurityException: Not allowed to change Do Not Disturb state
という例外エラーが発生し、操作が失敗する。
val audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
val currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION)
// ボリュームをゼロに設定
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, 0)
// ボリュームを元に戻す
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, currentVolume, 0)
参考資料