Android的TTS onUtteranceCompleted回调是没有得到所谓的回调、Android、TTS、onUtteranceCompleted

由网友(雨食Infante◎)分享简介:我试图获取Android TTS API来读我的话语,然后调用onUtteranceCompleted()监听器失败。我已经登记自己的TTS对象,并将其返回的成功,让我想不通,我为什么我的回调是没有得到所谓的生活。我试图寻找帮助,但似乎其他人有困难这一点。我失去了一些东西简单?感谢您的帮助,您可以提供。包com.tes...

我试图获取Android TTS API来读我的话语,然后调用onUtteranceCompleted()监听器失败。我已经登记自己的TTS对象,并将其返回的成功,让我想不通,我为什么我的回调是没有得到所谓的生活。

我试图寻找帮助,但似乎其他人有困难这一点。我失去了一些东西简单?

感谢您的帮助,您可以提供。

 包com.test.mytts;

进口的java.util.HashMap;

进口android.app.Activity;
进口android.media.AudioManager;
进口android.os.Bundle;
进口android.speech.tts.TextToSpeech;
进口android.speech.tts.TextToSpeech.OnInitListener;
进口android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
进口android.widget.TextView;
进口android.widget.Toast;

公共类MyTTS扩展活动实现OnInitListener,OnUtteranceCompletedListener
{
    TextView的电视;
    私人TextToSpeech _tts;

    @覆盖
    公共无效的onCreate(包savedInstanceState)
    {
        电视=新的TextView(本);

        tv.setText(MyTTS:);

        super.onCreate(savedInstanceState);
        的setContentView(电视);

        _tts =新TextToSpeech(这一点,这一点);
    }

    @覆盖
    公共无效的OnInit(INT状态)
    {
        HashMap的<字符串,字符串> myHashAlarm =新的HashMap<字符串,字符串>();

        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,将String.valueOf(AudioManager.STREAM_NOTIFICATION));
        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,测试);

        如果(状态== TextToSpeech.SUCCESS)
        {
            Toast.makeText(这一点,尽量说......,Toast.LENGTH_SHORT).show();

            INT结果= _tts.setOnUtteranceCompletedListener(本);

            tv.append(将String.valueOf(结果));

            _tts.setSpeechRate((浮动)。5);

            _tts.speak(测试一,二,三,TextToSpeech.QUEUE_ADD,myHashAlarm);
        }
        其他
            Toast.makeText(这一点,无法初始化TTS,Toast.LENGTH_SHORT).show();

    }

    @覆盖
    公共无效onUtteranceCompleted(字符串utteranceId)
    {
        Toast.makeText(这一点,onUtteranceCompleted,Toast.LENGTH_SHORT).show();
    }

    @覆盖
    公共无效的onDestroy()
    {
        super.onDestroy();
        _tts.shutdown();
    }
}
 

解决方案

调用setOnUtteranceCompletedListener的TTS对象的OnInit函数中。

如果您想进行任何更改的onUtteranceCompleted函数的调用用户界面,添加code进行runOnUIThread方法中。

Android TTS接口分析和调用实现

和千万要记得添加HashMap的参数值,同时调用说话()函数

例如:

  TextToSpeech TTS =新TextToSpeech(背景下,新OnInitListener(){

 @覆盖
 公共无效的OnInit(INT状态){

    mTts.setOnUtteranceCompletedListener(新OnUtteranceCompletedListener(){

        @覆盖
        公共无效onUtteranceCompleted(字符串utteranceId){

            runOnUiThread(新的Runnable(){

                @覆盖
                公共无效的run(){
                //用户界面的变化
                }
            });
        }
    });

 }
});


HashMap的<字符串,字符串> PARAMS =新的HashMap<字符串,字符串>();

params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_IDstringId);

tts.speak(文本讲,TextToSpeech.QUEUE_FLUSH,则params);
 

I am trying to get the Android TTS API to read my "utterance" and then call the onUtteranceCompleted() listener unsuccessfully. I've registered my TTS object and it returns SUCCESS, so I can't figure out for the life of me why my callback isn't getting called.

I've tried searching for help, but it seems others have difficulty with this too. Am I missing something simple?

Thanks for any help you can offer.

package com.test.mytts;

import java.util.HashMap;

import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
import android.widget.TextView;
import android.widget.Toast;

public class MyTTS extends Activity implements OnInitListener, OnUtteranceCompletedListener
{   
    TextView tv;
    private TextToSpeech _tts;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        tv = new TextView(this);

        tv.setText("MyTTS: ");

        super.onCreate(savedInstanceState);
        setContentView(tv);

        _tts = new TextToSpeech(this, this);
    }

    @Override
    public void onInit(int status) 
    {
        HashMap<String, String> myHashAlarm = new HashMap<String, String>();

        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_NOTIFICATION));
        myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "test");

        if (status == TextToSpeech.SUCCESS)
        {
            Toast.makeText(this, "Trying to speak...", Toast.LENGTH_SHORT).show();

            int result = _tts.setOnUtteranceCompletedListener(this);

            tv.append(String.valueOf(result));

            _tts.setSpeechRate((float) .5);

            _tts.speak("Testing one, two, three", TextToSpeech.QUEUE_ADD, myHashAlarm);
        }
        else
            Toast.makeText(this, "Failed to initialize TTS.", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onUtteranceCompleted(String utteranceId) 
    {
        Toast.makeText(this, "onUtteranceCompleted", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();
        _tts.shutdown();
    }
}

解决方案

Call the setOnUtteranceCompletedListener inside the onInit function of the tts object.

If you want to make any changes to the UI on the call of the onUtteranceCompleted function, add the code inside a runOnUIThread method.

And do remember to add the Hashmap param value while calling the speak() function

Example :

TextToSpeech tts= new TextToSpeech(context, new OnInitListener() {

 @Override
 public void onInit(int status) {

    mTts.setOnUtteranceCompletedListener(new OnUtteranceCompletedListener() {

        @Override
        public void onUtteranceCompleted(String utteranceId) {

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                //UI changes
                }
            });
        }
    });

 }
});


HashMap<String, String> params = new HashMap<String, String>();

params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId");

tts.speak("Text to Speak",TextToSpeech.QUEUE_FLUSH, params);

阅读全文

相关推荐

最新文章