文字转语音错误

时间:2011-11-10 20:46:36

标签: android text-to-speech

任何让我知道我做错了什么。试图让Text To Speech工作onClick for Text View。

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Intent;
import android.speech.tts.TextToSpeech;

public class MainActivity extends Activity implements TextToSpeech.OnInitListener
{
    private TextToSpeech tts;
    private static final int MY_DATA_CHECK_CODE = 1234;

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

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

        ((Button)findViewById(R.id.btnClear)) .setOnClickListener(clearbutton);  
    }

    public void onClick(View v)
    {
        TextView textSpeak = (TextView) findViewById(R.id.mainText);
        tts.speak(textSpeak.getText(), TextToSpeech.QUEUE_FLUSH, null);
    }

    public void onInit( int i)
    {

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == MY_DATA_CHECK_CODE)
        {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
            {
                tts = new TextToSpeech(this, this);
            }
            else
            {
                Intent installIntent = new Intent();
                installIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
                startActivity(installIntent);               
            }
        }
    }

    public void onDestory()
    {
        if (tts != null)
        {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }

    OnClickListener clearbutton = new OnClickListener()
    {
        public void onClick(View v)
        {
            TextView mainText = (TextView)findViewById(R.id.mainText);
            mainText.setText("");
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        switch (item.getItemId())
        {
        case R.id.select8icons: setContentView(R.layout.layout_8);
            break;
        case R.id.select24icons: setContentView(R.layout.layout_24);
            break;
        case R.id.select63icons: setContentView(R.layout.layout_63);
            break;
        }
        return true;
    }
}

如果有人可以提供帮助或有更好的方法来运行代码,我很乐意听到您的理想。我尝试研究,但我尝试的每一种方式给了我一个错误或什么。提前谢谢。

2 个答案:

答案 0 :(得分:1)

在TextToSpeech调用onInit之前,您的按钮将无效。所以你应该在那之前禁用btnSpeak。

答案 1 :(得分:0)

你的TTS看起来不错。但是,我没有看到你绑定到onClick方法的任何按钮的位置,你的Activity似乎也没有实现onClickListener接口。你需要做一个或另一个来运行onClick方法。

所以基本上,我没有看到任何方式你的onClick方法将被调用。

假设你的布局中有一些视图/按钮,用户应该点击听tts,我想你想要的东西:

Button btnSpeak = (Button)findViewById(R.id.btnSpeak);
btnSpeak.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                TextView textSpeak = (TextView) findViewById(R.id.mainText);
                tts.speak(textSpeak.getText(), TextToSpeech.QUEUE_FLUSH, null);

            }
        });