我刚刚完成编码,让文字转语音按钮读取用户按下的按钮上的文字。出于某种原因,每个按钮都会在第一个按钮上显示文字而不是自己的文字。显然这是一个问题,因为你不希望每个按钮说同样的事情。它在我的LogCat中没有注册错误,所以它工作正常,而不是我想要的方式。我没有java经验来找到问题的根源。
public class menu extends Activity implements TextToSpeech.OnInitListener,
OnClickListener {
TextToSpeech mTts;
Button speakButton, infoButton, voiceButton;
// TTS object
public TextToSpeech myTTS;
// status check code
public int MY_DATA_CHECK_CODE = 0;
@Override
protected void onCreate(Bundle aboutmenu) {
super.onCreate(aboutmenu);
setContentView(R.layout.mainx);
SpeakingAndroid speak = new SpeakingAndroid();
VoiceRecognition voiceinput = new VoiceRecognition();
// get a reference to the button element listed in the XML layout
speakButton = (Button) findViewById(R.id.btn_speak);
infoButton = (Button) findViewById(R.id.aboutbutton);
voiceButton = (Button) findViewById(R.id.voicebutton);
// listen for clicks
infoButton.setOnClickListener(this);
speakButton.setOnClickListener(this);
// check for TTS data
Intent checkTTSIntent = new Intent();
checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkTTSIntent, MY_DATA_CHECK_CODE);
voiceButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
}
});
}
public void onClick1(View about) {
// get the text entered
infoButton = (Button) findViewById(R.id.aboutbutton);
String words = infoButton.getText().toString();
speakWords(words);
Intent infoIntent = new Intent("android.intent.action.INFOSCREEN");
startActivity(infoIntent);
}
// respond to button clicks
public void onClick(View v) {
// get the text entered
speakButton = (Button) findViewById(R.id.btn_speak);
String words = speakButton.getText().toString();
speakWords(words);
Intent voiceIntent = new Intent("android.intent.action.RECOGNITIONMENU");
startActivity(voiceIntent);
}
// speak the user text
public void speakWords(String speech) {
// speak straight away
myTTS.speak(speech, TextToSpeech.QUEUE_FLUSH, null);
}
// act on result of TTS data check
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 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);
}
}
}
// setup TTS
public void onInit(int initStatus) {
// check for successful instantiation
if (initStatus == TextToSpeech.SUCCESS) {
if (myTTS.isLanguageAvailable(Locale.US) == TextToSpeech.LANG_AVAILABLE)
myTTS.setLanguage(Locale.US);
} else if (initStatus == TextToSpeech.ERROR) {
Toast.makeText(this, "Sorry! Text To Speech failed...",
Toast.LENGTH_LONG).show();
}
}
}
答案 0 :(得分:1)
在您的活动中声明文字转语音属性
private TextToSpeech mTTS;
在您的活动
中实例化您的文字转语音对象mTTS=new TextToSpeech(this,this);
获取对XML布局中列出的按钮的引用
speakButton = (Button) findViewById(R.id.btn_speak);
infoButton = (Button) findViewById(R.id.btn_about);
voiceButton = (Button) findViewById(R.id.btn_voice);
收听Button的ClickEvents,您的活动必须实现View.OnClickListener
界面
infoButton.setOnClickListener(this);
speakButton.setOnClickListener(this);
voiceButton.setOnClickListener(this);
处理Overriden onClick()方法中的Click事件:
@Override
public void onClick(View v) {
switch(v.getId())
{
case R.id.btn_speak:
mTTS.speak(speakButton.getText().toString(), TextToSpeech.QUEUE_ADD, null);
break;
case R.id.btn_about:
mTTS.speak(infoButton.getText().toString(), TextToSpeech.QUEUE_ADD, null);
break;
case R.id.btn_voice:
mTTS.speak(voiceButton.getText().toString(), TextToSpeech.QUEUE_ADD, null);
break;
}
}