2016-04-22 106 views
1

由于某些原因,onInit方法中的stautus将永远不会是TextToSpeech.SUCCESS。为什么?为什么我的文本到语音设置未成功初始化?

package me.ruben.learningproject; 

import android.app.Activity; 
import android.speech.SpeechRecognizer; 
import android.speech.tts.TextToSpeech; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.util.Locale; 


public class MainActivity extends Activity implements TextToSpeech.OnInitListener { 

    TextToSpeech tts; 
    EditText inputText; 

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

     tts = new TextToSpeech(this, this); 
     inputText = (EditText)findViewById(R.id.inputText); 
    } 

    @Override 
    public void onInit(int status){ 
     if(status != TextToSpeech.SUCCESS){ 
      Toast.makeText(this, "Error initializing text to speech!", Toast.LENGTH_LONG).show(); 
      return; 
     } 
     tts.setLanguage(Locale.UK); 
     ((Button) findViewById(R.id.speakBtn)).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       speak(); 
      } 
     }); 
    } 

    void speak(){ 
     tts.speak(inputText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 
    } 
} 

在重新启动后它甚至不起作用,我在Android Studio中没有收到任何编译错误。

任何想法它可能是什么?

回答

0

您在speak()方法之前错过了stopSelf()的实施。

+0

谢谢!但是,我将如何实施?你能提供样品吗? – 000000000000000000000

0

要触发它,请在可以运行您的方法的onCreate中添加一个按钮。

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

     // button on click event 
     btnSpeak.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       speak(); 
      } 

     }); 

,并在现有的方法中的小的变化,讲():

private void speak() { 

String text = inputText.getText().toString(); 
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 

} 
0

更改Init()方法是这样的:

@Override 
public void onInit(int status){ 

    new Thread(new Runnable() { 

       @Override 
       public void run() { 

        if(status != TextToSpeech.SUCCESS){ 

         Toast.makeText(this, "Error initializing text to speech!", Toast.LENGTH_LONG).show(); 
         return; 
        } 
        tts.setLanguage(Locale.UK); 
        ((Button) findViewById(R.id.speakBtn)).setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           speak(); 
          } 
         }); 
       } 
      }).start(); 


} 

运行的是在不同的线程可能会有所帮助。 。!

相关问题