TextToSpeech:服务还没有开始?

时间:2012-04-11 15:01:19

标签: android text-to-speech

嘿,我是一个创建应用程序,它是TextToSpeech的功能。我编写代码并运行但没有任何
言语产生了。在logcat中显示一些错误。这是logcat

04-11 20:21:30.099: VERBOSE/TtsService(481): TtsService.setLanguage(eng, USA, )
04-11 20:21:30.109: INFO/TextToSpeech.java - speak(849): speak text of length 41
04-11 20:21:30.109: ERROR/TextToSpeech.java - speak(849): service isn't started

我不明白如何解决这个问题......这是我的完整代码。

public class ExamAppearingActivity extends Activity implements OnInitListener 
{
 private int MY_DATA_CHECK_CODE = 0;    
 private TextToSpeech tts;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.examquestionscreen);
            if (isVoiceEnabled==1)
        {

            tts = new TextToSpeech(this, this);

            final List<ObjectiveWiseQuestion> QuestionWiseProfile1= db.getOneQuestion(examId);       

            for (final ObjectiveWiseQuestion cn : QuestionWiseProfile1)
            {   
                Intent checkIntent = new Intent();
                checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
                startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

                db=new MySQLiteHelper(getBaseContext());
                db.getWritableDatabase();    
                counter=cn.getCounter();

                String question="Question is "+cn.getQuestion();
                String option1="Option A is "+cn.getOptionA();
                String option2="Option B is "+cn.getOptionB();
                String option3="Option C is "+cn.getOptionC();
                String option4="Option D is "+cn.getOptionD();
                tts.speak(question, TextToSpeech.QUEUE_ADD, null);
                tts.speak(option1, TextToSpeech.QUEUE_ADD, null);
                tts.speak(option2, TextToSpeech.QUEUE_ADD, null);
                tts.speak(option3, TextToSpeech.QUEUE_ADD, null);
                tts.speak(option4, TextToSpeech.QUEUE_ADD, null);
              }
       }
   }

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MY_DATA_CHECK_CODE) {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                // success, create the TTS instance
                tts = new TextToSpeech(this, this);

            } 
            else {
                // missing data, install it
                Intent installIntent = new Intent();
                installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);

               //tts.isLanguageAvailable(Locale.INDIA_HINDI);
                startActivity(installIntent);

            }
        }

    }

    @Override
    public void onInit(int status) 
    {        
        if (status == TextToSpeech.SUCCESS) 
        {
            // tts.setLanguage(Locale.US);

            Locale loc = new Locale ("hi_IN");
            tts.setLanguage(loc);

            Toast.makeText(ExamAppearingActivity.this,"Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show();
        }
        else if (status == TextToSpeech.ERROR) 
        {
            Toast.makeText(ExamAppearingActivity.this, "Error occurred while initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
        }

    }

此代码仅在我点击按钮时添加,但我需要从中启动它 onCreate()方法。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在调用tts之前,您无法使用onInit

目前,您创建它并尝试在onCreate方法中使用它,但到那时它还没有完成初始化。

您还要创建tts两次。 onActivityResult中的那个最有意义,因为您首先检查它是否存在。我将在onCreate中删除创作,并将所有实际的发言都放入onInit