当我把我的文本到语音的android应用程序放在标签上时,它就停止工作了
我有一个文本到语音的应用程序,它工作得非常好。问题是我必须把它放在一个标签上,标签工作正常。但是当我把tts放在标签里时,它就不工作了。我已经更改了类名,布局为视图和包,当然除了变量之外,其他一切都是不可更改的。没问题。不幸的是,我真的不得不把它记在账单上。但最糟糕的是它没有显示任何错误。即使试抓也抓不到任何东西。所以我想这是一种逻辑错误,它把我脑子里的所有逻辑都吸干了。Lol.我检查了主活动,在这里调用了这个活动,并且显示,它们是干净的。下面是代码:当我把我的文本到语音的android应用程序放在标签上时,它就停止工作了,android,tabs,text-to-speech,Android,Tabs,Text To Speech,我有一个文本到语音的应用程序,它工作得非常好。问题是我必须把它放在一个标签上,标签工作正常。但是当我把tts放在标签里时,它就不工作了。我已经更改了类名,布局为视图和包,当然除了变量之外,其他一切都是不可更改的。没问题。不幸的是,我真的不得不把它记在账单上。但最糟糕的是它没有显示任何错误。即使试抓也抓不到任何东西。所以我想这是一种逻辑错误,它把我脑子里的所有逻辑都吸干了。Lol.我检查了主活动,在这里调用了这个活动,并且显示,它们是干净的。下面是代码: package leytocz.add.a
package leytocz.add.andriod;
import java.util.Locale;
import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class nptab extends Activity implements TextToSpeech.OnInitListener{
private TextToSpeech tts;
private Button btnSpeak;
private EditText txtText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nptab);
tts=new TextToSpeech(this,this);
btnSpeak=(Button) findViewById(R.id.btnSpeak);
txtText=(EditText) findViewById(R.id.txtText);
btnSpeak.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
speakOut();
}
});
}
@Override
public void onInit(int status) {
if (status==TextToSpeech.SUCCESS) {
int result=tts.setLanguage(Locale.US);
if (result==TextToSpeech.LANG_MISSING_DATA
|| result==TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS","This Language is not supported");
} else {
btnSpeak.setEnabled(true);
speakOut();
}
} else {
Log.e("TTS", "Initialization Failed!");
}
}
private void speakOut() {
String text=txtText.getText().toString();
tts.speak(text,TextToSpeech.QUEUE_FLUSH, null);
}
}
对
static TextToSpeech mTTS;
onCreate():
onActivityResult:
if (requestCode == MY_DATA_CHECK_CODE && !mTTSInitialized)
{
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS)
{
// success, create the TTS instance
mTTS = new TextToSpeech(this, (OnInitListener) this);
if (mTTS!=null)
mTTSInitialized = true;
}
else
{
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
吸气剂:
public static TextToSpeech getmTTS() {
return mTTS;
}
所有这些都放在TabHost本身中。不需要在活动中编写这么多代码,只需单独编写这一行,我也遇到了这个问题,最后我得到了这个解决方案 换这个
tts=new TextToSpeech(this,this); --this is your code
你这样改变
tts=new TextToSpeech(getParent(),this);
这对我来说非常有效没有人知道答案吗(我做了类似的事情,让我的TabHost创建了tts,并为其他活动使用了一个静态get方法来使用这个tts对象。不知道这是否是最佳实践,但工作完美无瑕。先生,请纠正我,如果我错了,您的tts声明在TabHost中,而不是在活动itslef中?如果它解决了您的问题,您能否将答案标记为Acceptd、 请?等等,你能先解释一下吗?我不太懂你的代码。这和我如何称呼tts相去甚远。我不太熟悉。请解释一下。谢谢。你创建了一个TextToSpeech类型的类变量,它是包含TabHost的类的一员。通常这些变量放在你的类声明和d activities onCreate()方法。然后在onCreate()中创建一个意图来检查手机上TTS的可用性。在
onActivityResult()中
method您最终初始化了在第一步中声明的TTS变量。为了在其他活动中使用,您在包含TabHost
的类中创建了一个getter方法,该类只返回TTS变量。在Activity
中要使用TTS的地方,您调用TabHost
的getter,例如TabHostClass。getmTTS().speak(“口语文本”,TextToSpeech.QUEUE_FLUSH,null);
您是否能够实现与制表符无关的TTS?
tts=new TextToSpeech(getParent(),this);