ユーザーとコミュニケーションを取る方法の一つに、テキスト読み上げ(TTS)テクノロジーの使用があります。TTS は Android に組み込まれており(追加のライブラリは不要)、オフラインでも動作します。これらの特性により、TTS はディスプレイなしモードでのエラー条件の処理に最適です。TTS 機能は、TextToSpeech クラスを使用して参照できます。
TextToSpeech をインスタンス化する
Activity のライフタイム全体で使用できるように、投影されたアクティビティの onCreate メソッドで TextToSpeech クラスをインスタンス化することをおすすめします。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
tts = TextToSpeech(this) { status ->
if(status == TextToSpeech.SUCCESS) {
// Initialization successful
}else {
// Initialization failed
}
}
...
}
TTS の開始時にユーザーに通知する
ディスプレイのない(音声のみの)エクスペリエンスの場合は、onStart メソッドで通知することで、アプリが正常に起動したことをユーザーに知らせます。
override fun onStart() {
super.onStart()
tts?.speak("Welcome to Android XR Glasses!",
TextToSpeech.QUEUE_FLUSH,
null,
"welcome_utterance")
...
}
コードに関する主なポイント
TextToSpeech.QUEUE_FLUSHは、テキストをすぐに読み上げ、他の TTS 発話を中断する必要があることを示します。utteranceId(この場合は"welcome_utterance")は、このテキストの読み上げが終了したタイミングを識別するために使用されます。詳細については、UtteranceProgressListenerをご覧ください。
TTS を中断する
アプリで TTS を中断する必要がある場合は、stop メソッドを呼び出します。
// This interrupts the current utterance and discards other utterances in the queue.
tts?.stop()
...
TTS リソースをクリーンアップする
アクティビティが破棄されたときにリソースをクリーンアップするには、アクティビティの onDestroy メソッド内で shutdown メソッドを呼び出します。
override fun onDestroy() {
super.onDestroy()
tts?.shutdown()
}