Android的TTS onUtteranceCompleted回调是没有得到所谓的 [英] Android TTS onUtteranceCompleted callback isn't getting called

查看:1074
本文介绍了Android的TTS onUtteranceCompleted回调是没有得到所谓的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图获取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方法中。

和千万要记得添加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);

这篇关于Android的TTS onUtteranceCompleted回调是没有得到所谓的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆