私は本当に何かに苦しんでいます...私は、口頭でtts speek機能を介して、そして画面上のテキストを介して一度に文章。Android:ttsが終了するまで待ってから続行
私はテキストビュー領域を準備していますが、それをまとめることは私が得意でないことです。いずれかの文章を読み、最後の文章のみを表示するか、最初の文章のみを表示して読み上げるかのいずれかです。
私はこの目標をどのように達成できますか?
私は本当に何かに苦しんでいます...私は、口頭でtts speek機能を介して、そして画面上のテキストを介して一度に文章。Android:ttsが終了するまで待ってから続行
私はテキストビュー領域を準備していますが、それをまとめることは私が得意でないことです。いずれかの文章を読み、最後の文章のみを表示するか、最初の文章のみを表示して読み上げるかのいずれかです。
私はこの目標をどのように達成できますか?
boolean speakingEnd = tts.isSpeaking();
do{
speakingEnd = tts.isSpeaking();
} while (speakingEnd);
//Continue with code
public void speak(String message){
tts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
while (tts.isSpeaking()){
System.Out.Println("Do something or nothing while speaking..")
}
}
私はちょうどUtteranceProgressListenerを使用し、speak methodによると、この問題に走りました。これはUIスレッドでは実行されないことがわかったので、runOnUiThread()を使用してアクティビティを更新する必要がありました。
tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
}
@Override
public void onDone(String utteranceId) {
LettersActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// Do something on UI thread
}
});
}
@Override
public void onError(String utteranceId) {
Log.e(TAG, "error on " + utteranceId);
}
});
この
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener{
private boolean initialized;
private String queuedText;
private String TAG = "TTS";
private TextToSpeech tts;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this /* context */, this /* listener */);
tts.setOnUtteranceProgressListener(mProgressListener);
speak("hello world");
}
public void speak(String text) {
if (!initialized) {
queuedText = text;
return;
}
queuedText = null;
setTtsListener(); // no longer creates a new UtteranceProgressListener each time
HashMap<String, String> map = new HashMap<String, String>();
map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
tts.speak(text, TextToSpeech.QUEUE_ADD, map);
}
private void setTtsListener() {
}
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
initialized = true;
tts.setLanguage(Locale.ENGLISH);
if (queuedText != null) {
speak(queuedText);
}
}
}
private abstract class runnable implements Runnable {
}
private UtteranceProgressListener mProgressListener = new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
} // Do nothing
@Override
public void onError(String utteranceId) {
} // Do nothing.
@Override
public void onDone(String utteranceId) {
new Thread()
{
public void run()
{
MainActivity.this.runOnUiThread(new runnable()
{
public void run()
{
Toast.makeText(getBaseContext(), "TTS Completed", Toast.LENGTH_SHORT).show();
}
});
}
}.start();
}
};
}
おかげだけで実行されているAPI> = 15をお試しください – mesutpiskin