在我的主要片段中,我实现了 TextToSpeechmainFragment extends Fragment implements TextToSpeech.OnInitListener
.
文本到语音工作正常,我还添加了一个UtteranceProgressListener
这是有效的。
我的问题 :
我无法调用任何自定义函数,例如gotoNextChapter()
甚至是一个简单的Toaster
。
出现错误Can't create handler inside thread that has not called Looper.prepare()
欢迎任何建议或解决方案......
我的代码片段:
UtteranceProgressListener SpeechListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show();
}
@Override
public void onDone(String utteranceId) {
Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show();
gotoNextChapter(); <====function I want to call
read_mode = 0;
}
@Override
public void onError(String utteranceId) {
Toast.makeText(getActivity(),utteranceId, Toast.LENGTH_LONG).show();
}
};
设置话语完整监听器:
myTTS.setOnUtteranceProgressListener(SpeechListener);
收到错误:
Caught a RuntimeException from the binder stub implementation.
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at
android.os.Handler.<init>(Handler.java:209)
at
android.os.Handler.<init>(Handler.java:123)
at
android.widget.Toast$TN.<init>(Toast.java:350)
at
android.widget.Toast.<init>(Toast.java:106)
at
android.widget.Toast.makeText(Toast.java:264)
at com.MainActivity$Read$10.onDone(MainActivity.java:1252)
好的,我找到了解决方案,现在我的问题似乎微不足道
我更新的代码如下所示:
@Override
public void onDone(String utteranceId) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getContext(),utteranceId,Toast.LENGTH_LONG).show();
gotoNextChapter(); <====function I want to call
read_mode = 0;
}
});
}
感谢这里的这些人:Android 语音通话结束后如何 Toast https://stackoverflow.com/questions/35982041/how-can-i-toast-after-text-to-speech-finish-speaking-android?rq=1
and 我们什么时候需要在android应用程序中使用runOnUiThread? https://stackoverflow.com/questions/10135353/when-may-we-need-to-use-runonuithread-in-android-application
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)