我正在尝试找出为什么我的应用程序无法按预期运行的原因。为了找出原因,我创建了一个包含单个活动的小项目,如果您按一个按钮,则应该说出预定义的单词。我正在使用Sony Xperia Compact Android9。最近我进行了一些系统更新,这可能是原因吗?
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private TextToSpeech textToSpeech;
private boolean isInitialized = false;
private MainActivity mainActivity;
int ctr = 0;
private String words[] = {"handboll", "kula", "golf"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mainActivity = this;
textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS){
textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
System.out.println("---onStart");
}
@Override
public void onDone(String utteranceId) {
System.out.println("-----onDone");
}
@Override
public void onError(String utteranceId) {
System.out.println("-----onError");
}
@Override
public void onError(String utteranceId, int errorCode){
onError(utteranceId);
System.out.println("Error with code: " + errorCode);
}
});
isInitialized = true;
Locale locale = new Locale("sv");
textToSpeech.setLanguage(locale);
}
}
});
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isInitialized){
System.out.println(textToSpeech.getLanguage().getDisplayLanguage());
textToSpeech.speak(words[ctr], TextToSpeech.QUEUE_FLUSH, null, "SpeakTest");
ctr++;
ctr %= words.length;
} else {
Snackbar.make(view, "Speaker not ready", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
});
}
}
发生的事情是,当我按下按钮时只说了几个字。例如,在这种情况下,只能说handboll
和kula
,而不能说golf
。在其他情况下,不能说kula
。
然后,我创建了数组{"kula", "kula", "kula"}
并按下了大约100次按钮,然后突然开始工作。因此很明显它可以说出单词,但是当我按下按钮时并不会总是发生。
对于Locale
对象,我尝试了sv, sv-SV
和swe
,它们的结果相同。
如果我使用英语和en
,效果很好。
答案 0 :(得分:0)
我在Ankidroid中遇到泰国人同样的问题。通常不讲话,但如果我使用手势重复讲话的次数足够多,有时会感到困惑。英语很好用。我卸载了Google文字语音转换的更新,并且可以再次使用。