首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android:如何在非活动类上使用文本到语音

android:如何在非活动类上使用文本到语音
EN

Stack Overflow用户
提问于 2015-03-09 21:49:38
回答 2查看 1.9K关注 0票数 1

我想在我的应用程序中使用文本到语音转换,我找到了许多使用文本到语音转换的示例,比如这个Android Text-To-Speech Application。我想使用非活动类中的文本到语音转换,例如,我有生成布局的类,并将此布局返回到我的主要活动,我有此布局上的按钮,当单击此按钮时,我希望调用文本到语音。如何在非活动类上使用文本到语音转换?

EN

回答 2

Stack Overflow用户

发布于 2017-02-17 06:56:40

创建语音类,如下所示:

代码语言:javascript
运行
复制
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(),为了获得上下文,你需要创建一个类扩展应用程序,如下所示:

代码语言:javascript
运行
复制
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;
    }
}

并将清单中与此类相关的应用程序定义为:

代码语言:javascript
运行
复制
<application
        android:name=".Zillion"
</application>
票数 3
EN

Stack Overflow用户

发布于 2015-03-10 06:54:04

您可以使用facade来实现这一点。

定义接口,例如TTSListener.java

代码语言:javascript
运行
复制
public interface TTSListener{
public void speak(String text);
public void pause(long duration);
}

在您的主活动中,实现接口:

代码语言:javascript
运行
复制
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方法:

代码语言:javascript
运行
复制
public class SomeClass{
    TTSListener ttsListener;


    public SomeClass(Context context){  
    ttsListener = (TTSListener)context;
    }

   ttsListener.speak("Hello"); 
   ttsListener.pause(4000);   //pause for 4 seconds

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28943614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档