Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android,speak失败:TTS引擎连接未完全设置_Java_Android_Text To Speech - Fatal编程技术网

Java Android,speak失败:TTS引擎连接未完全设置

Java Android,speak失败:TTS引擎连接未完全设置,java,android,text-to-speech,Java,Android,Text To Speech,我正试图让我的TextToSpeech正常工作,但我得到了一个“speak failed:TTS引擎连接未完全设置”,但变成了绿色:连接到组件信息{…googlettssservice} 我没有找到解决办法,谷歌也没有给我有趣的东西 以下是我的代码,可以对其进行概述。(您可以在此处找到完整的代码: 导入android.speech.tts.TextToSpeech; 导入android.speech.tts.TextToSpeech.OnInitListener; 公共类MainActivity

我正试图让我的
TextToSpeech
正常工作,但我得到了一个“speak failed:
TTS
引擎连接未完全设置”,但变成了绿色:连接到组件信息{…googlettssservice}

我没有找到解决办法,谷歌也没有给我有趣的东西

以下是我的代码,可以对其进行概述。(您可以在此处找到完整的代码:

导入android.speech.tts.TextToSpeech;
导入android.speech.tts.TextToSpeech.OnInitListener;
公共类MainActivity扩展活动实现OnInitListener
{
受保护的静态最终整数结果\u SPEECH=1;
公共静态最终int语音识别请求代码=1234;
公共文本以查看myTTS;
受保护的静态最终int MY_DATA_CHECK_CODE=0;
@凌驾
公共无效onInit(int状态){
if(status==TextToSpeech.SUCCESS){
int result=myTTS.setLanguage(Locale.getDefault());
if(result==TextToSpeech.LANG_缺少数据| | result==TextToSpeech.LANG_不受支持){
Toast.makeText(MainActivity.this,
“不支持此语言”,Toast.LENGTH_LONG.show();
}
否则{
Toast.makeText(MainActivity.this,
“文本到语音引擎已初始化”,Toast.LENGTH_LONG.show();
}
}
else if(状态==TextToSpeech.ERROR){
Toast.makeText(MainActivity.this,
“初始化文本到语音引擎时出错”,Toast.LENGTH_LONG.show();
}
}
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
意向检查意向=新意向();
checkIntent.setAction(TextToSpeech.Engine.ACTION\u CHECK\u TTS\u数据);
startActivityForResult(检查意图、我的数据检查代码);
editText=(editText)findViewById(R.id.editText);
send=(按钮)findviewbyd(R.id.send_按钮);
send.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
String message=editText.getText().toString();
//在arrayList中添加文本
添加(“>”+消息);
//将消息发送到服务器
if(mTcpClient!=null){
mTcpClient.sendMessage(消息);
}
//刷新列表
mAdapter.notifyDataSetChanged();
editText.setText(“”);
}
});
按钮btnSpeak=(按钮)findViewById(R.id.speak_按钮);
btnSpeak.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图=新意图(
识别者(意图、行动、识别、言语);
intent.putExtra(RecognizerIntent.EXTRA_语言_模型,“en-US”);
试一试{
startActivityForResult(意图、结果和演讲);
editText.setText(“”);
}捕获(ActivityNotFoundException a){
Toast t=Toast.makeText(getApplicationContext(),
“哎呀!您的设备不支持语音转换为文本”,
烤面包片(长/短);
t、 show();
}
}
});
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
开关(请求代码){
个案结果(演讲):{
if(resultCode==RESULT\u OK&&null!=数据){
ArrayList文本=数据
.getStringArrayListExtra(识别器意图.额外结果);
editText.setText(text.get(0));
send.performClick();
}
打破
}
案例我的数据检查代码:{
if(resultCode==TextToSpeech.Engine.CHECK\u VOICE\u DATA\u PASS){
//用户拥有必要的数据-创建TTS
myTTS=新文本到语音(这个,这个);
}否则{
//无数据-立即安装
Intent installttsinent=新Intent();
安装
.setAction(TextToSpeech.Engine.ACTION\u安装\u TTS\u数据);
StartTactivity(安装);
}
打破
}
}
}
@凌驾
受保护的空onDestroy(){
super.ondestory();
myTTS.shutdown();
}
我是
Java/androidsdk
的初学者……代码可能看起来很糟糕

如果有人能解释我的错误,最好的是,给我一个答案,这应该是非常好的


谢谢,圣诞快乐!

由于调用了AsyncTask,onInit方法似乎从未执行过。 我在onInit()方法中移动了connect调用,而不是onCreate(),现在它可以工作了


希望它能帮助别人。

这个问题很老了,但我最近遇到了类似的问题。在我的例子中,传递给
speak
方法的第一句话从未被说出,LogCat显示了此警告

我通过将
TextToSpeech
对象作为静态对象来处理它,并创建了一个
static
setup
方法。作为一个。我在我的应用程序的第一个
onCreate
上调用这个方法。到现在为止,它工作得很好。请参见下文


公共类扬声器管理器{
专用静态文本语音扬声器;
公共静态无效设置(){
如果(扬声器==null){
speaker=newtexttospeech(MyAppUtils.getApplicationContext(),newtexttospeech.OnInitListener()){
@凌驾
公共图书馆
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;

public class MainActivity extends Activity implements OnInitListener
{

    protected static final int RESULT_SPEECH = 1;

    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    public TextToSpeech myTTS;
    protected static final int MY_DATA_CHECK_CODE = 0;


    @Override
    public void onInit(int status) {       
        if (status == TextToSpeech.SUCCESS) {
            int result = myTTS.setLanguage(Locale.getDefault());

            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Toast.makeText(MainActivity.this,
                        "This Language is not supported", Toast.LENGTH_LONG).show();                    
            }
            else {
                Toast.makeText(MainActivity.this,
                    "Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show();
            }
        }
        else if (status == TextToSpeech.ERROR) {
            Toast.makeText(MainActivity.this,
                    "Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

        editText = (EditText) findViewById(R.id.editText);
        send = (Button)findViewById(R.id.send_button);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String message = editText.getText().toString();

                //add the text in the arrayList
                arrayList.add("> " + message);

                //sends the message to the server
                if (mTcpClient != null) {
                    mTcpClient.sendMessage(message);
                }

                //refresh the list
                mAdapter.notifyDataSetChanged();
                editText.setText("");
            }
        });

        Button btnSpeak = (Button) findViewById(R.id.speak_button);

        btnSpeak.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(
                        RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");

                try {
                    startActivityForResult(intent, RESULT_SPEECH);
                    editText.setText("");
                } catch (ActivityNotFoundException a) {
                    Toast t = Toast.makeText(getApplicationContext(),
                            "Opps! Your device doesn't support Speech to Text",
                            Toast.LENGTH_SHORT);
                    t.show();
                }
            }
        });


    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case RESULT_SPEECH: {
            if (resultCode == RESULT_OK && null != data) {

                ArrayList<String> text = data
                        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

                editText.setText(text.get(0));
                send.performClick();
            }
            break;
        }
        case MY_DATA_CHECK_CODE: {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                // the user has the necessary data - create the TTS
                myTTS = new TextToSpeech(this, this);
            } else {
                // no data - install it now
                Intent installTTSIntent = new Intent();
                installTTSIntent
                        .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installTTSIntent);
            }
            break;
        }
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myTTS.shutdown();
    }