我想在我的应用程序中使用文本到语音转换,我找到了许多使用文本到语音转换的示例,比如这个Android Text-To-Speech Application。我想使用非活动类中的文本到语音转换,例如,我有生成布局的类,并将此布局返回到我的主要活动,我有此布局上的按钮,当单击此按钮时,我希望调用文本到语音。如何在非活动类上使用文本到语音转换?
发布于 2017-02-17 06:56:40
创建语音类,如下所示:
package zillion;
import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.widget.Toast;
import java.util.Locale;
public class Speech {
private static TextToSpeech tts;
private static CharSequence SC_str;
private static String S_str;
public static void Talk(Context context, String str) {
Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
S_str = str;
tts = new TextToSpeech(Zillion.getContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR) {
tts.setLanguage(Locale.UK);
tts.setPitch(1.3f);
tts.setSpeechRate(1f);
// tts.speak(SC_str, TextToSpeech.QUEUE_FLUSH, null,null);
tts.speak(S_str, TextToSpeech.QUEUE_FLUSH, null);
}
}
});
}
}
正如你注意到的,Zillion.getContext()
已经被用来替代getApplicationContext()
,为了获得上下文,你需要创建一个类扩展应用程序,如下所示:
package zillion;
import android.app.Application;
import android.content.Context;
public class Zillion extends Application {
private static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}
public static Context getContext() {
return mContext;
}
}
并将清单中与此类相关的应用程序定义为:
<application
android:name=".Zillion"
</application>
发布于 2015-03-10 06:54:04
您可以使用facade来实现这一点。
定义接口,例如TTSListener.java
public interface TTSListener{
public void speak(String text);
public void pause(long duration);
}
在您的主活动中,实现接口:
public class MainActivity extends Activity implements TTSListener{
@Override
public void speak(String text){
runOnUiThread(new Runnable() {
@Override
public void run(){
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
);
}
@Override
public void pause(long duration){
runOnUiThread(new Runnable() {
@Override
public void run(){
tts.playSilence(duration, TextToSpeech.QUEUE_FLUSH, null);
}
);
}
最后,在非活动的类中,您可以调用TTS方法:
public class SomeClass{
TTSListener ttsListener;
public SomeClass(Context context){
ttsListener = (TTSListener)context;
}
ttsListener.speak("Hello");
ttsListener.pause(4000); //pause for 4 seconds
}
https://stackoverflow.com/questions/28943614
复制相似问题