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);
我希望回复包含:
然而,结果如下:
为什么?
答案 0 :(得分:1)
对于不可用的声音,我使用以下内容:
ArrayList<String> unavailable = data
.getStringArrayListExtra("unavailableVoices");
结果始终采用'eng-GBR'或'eng'格式。
如果我误解了你的问题并且你想知道为什么你没有专门为你搜索'eng-USA-female'(而不是根本)而获得'不可用'输出,那么我可以只建议格式不适合过去搜索。我建议搜索'zzz-ZZZ'以查看实际问题所在......
希望有所帮助。