Android 使应用程序能够查询平台以获取语言文件的可用性:只需实例化下面的意图并通过使用startActivityForResult
方法将其以异步请求的形式发送。
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, TTS_CHECK_DATA_REQUEST_CODE);
调用方法返回上述请求的结果onActivityResult
:第二个参数是代表上述请求成功或失败的值,第三个参数包含一些附加数据。在附加数据中,有两个列表(可能为空):
可用的声音;
ArrayList<String> availableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES); Log.i(LOG_TAG, String.format("Available voices: %s %s", availableVoices.size(), availableVoices.toString()));
不可用的声音。
ArrayList<String> unavailableVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES); Log.i(LOG_TAG, String.format("Unavailable voices: %s %s", unavailableVoices.size(), unavailableVoices.toString()));
对于如上所示的简单请求,不可用语音列表是空的,而可用语音阵列则填充了系统上安装的所有语音。
如果添加TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR
额外内容,行为会发生变化:根据文档,此额外内容用于向 TTS 引擎提供指令以检查某些特定声音。这是源代码的示例:
ArrayList<String> checkVoiceDataFor = new ArrayList<String>(3);
checkVoiceDataFor.add("ita-ITA"); // installed on emulator
checkVoiceDataFor.add("eng-USA-female"); // not installed
checkVoiceDataFor.add("eng-USA"); // installed on emulator
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
checkIntent.putStringArrayListExtra(TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR, checkVoiceDataFor);
我希望响应包含:
- 可用声音列表中的 ita-ITA 和 eng-USA;
- eng-USA-female 在不可用的声音列表中。
但是,结果如下:
- 可用声音:2 [eng-USA ita-ITA]
- 不可用的声音:0 []
为什么?