我正在尝试创建一个通过TextToSpeech口头说出给定文本字符串的应用程序。我以前正在寻找一种从字符串中选择给定语言的方法。但是,现在我正在尝试解决如何在Google Play商店中安装语言(如果该语言尚未在设备上安装)。
E.G。如果没有安装俄语,并且我提供俄语国家代码(我有),则需要检查并安装语言包。语言可以随时通过用户干预来改变。
这件事让我对它的运作方式感到困惑。
我找到了这个链接:http://android-developers.blogspot.com.au/2009/09/introduction-to-text-to-speech-in.html
我有应用TextToSpeech构建的基本结构......如下所示。我没有在应用程序中添加用于更改语言的代码,也没有使用该语言的任何变量。在我已经展示的代码中,为了简单起见,我将其保留为静态。当语言改变时,将重建以下代码。
t1=new TextToSpeech(context, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR) {
User u = new User(context);
t1.setLanguage(Locale.US); // TODO: 22/09/2015 FIX LOCALE FOR TextToSpeech
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
/** creates a high quality voice when on Lollipop or better android version */
Voice voice = new Voice("voice", Locale.US, Voice.QUALITY_VERY_HIGH, Voice.LATENCY_NORMAL, false, null);
t1.setVoice(voice);
}
}
}
});
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v.findViewById(R.id.to_language);
String toSpeak = tv.getText().toString();
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null, v.getTag().toString());
t1.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
//tv.setTextColor(Color.parseColor("#57d801"));
}
@Override
public void onDone(String utteranceId) {
//tv.setTextColor(Color.parseColor("#FFFFFF"));
}
@Override
public void onError(String utteranceId) {
}
});
} else {
t1.speak(toSpeak, TextToSpeech.QUEUE_FLUSH, null);
t1.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() {
@Override
public void onUtteranceCompleted(String utteranceId) {
}
});
}
}
});
我不希望有人为我做这件事。我希望有人能够更好地向我说明上面的网站,更多地参考我的问题。这样我就能理解并实施解决方案来解决我的问题。
这最终必须在没有互联网的情况下脱机工作(下载其他语言除外)。