我想在我的应用程序中使用文本到语音,我找到许多使用文本到语音的示例,如Android Text-To-Speech Application。我想从非活动类使用文本到语音,例如我有生成布局的类,并将此布局返回到我的主要活动,我在此布局上有按钮,我想在单击此按钮时调用文本到语音。如何在非活动类上使用文本到语音?
答案 0 :(得分:1)
您可以使用外观来实现此目的。
定义一个接口,例如TTSListener.java
:
public interface TTSListener{
public void speak(String text);
public void pause(long duration);
}
在您的Main活动中,实现界面:
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
}
答案 1 :(得分:0)
创建您的Speech类,如下所示:
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>