概要
AndroidにおけるSpeechRecognizerに不具合がでてるようです。
自分のアプリケーションに対して特に変更していないのに、急にユーザーから苦情がきたので気づきました。
再現方法
2017年2月下旬における最新版Googleアプリ(6.12.25.21.arm)にアップデートしていた場合、再現が可能です。
※AndroidのSpeechRecognizerの認識処理はGoogleアプリで行われているため
- デバイスをオフラインにします
- SpeechRecognizerでstartListeningをします
- わざと認識失敗します。(なにも喋らなければOK)
- 認識失敗の音がなります
- onErrorのコールバックが返ってきません
回避策
-
オフラインでの音声認識を制限方法
これはユーザービリティに関わるのであまりやりたくないのですが、コールバック待ちでフリーズする問題は防げます。 -
SpeechRecognizerにTimeoutを設定する方法
SpeechRecognizerをRx化してる場合は特にTimeout設定すると簡単に出来ます。SpeechRecognizerは連続音声認識ではないので、十数秒でTimeoutを設定すれば十分なlistening durationがkeep出来ます。
最後に
Googleアプリは日々アップデートされますが、SpeechRecognizer周りも結構変更があるので、Googleアプリをダウングレードするなどして確認できる環境を整える必要があると感じました。
余談
認識失敗時の音もならなくなったようです。認識成功時の音は変わらず。認識をキャンセルするときは失敗時の音がなります。