来自多个活动的Android TTS

时间:2012-10-09 17:44:11

标签: android android-activity

我想从几个活动中节省使用TTS(一个MAIN活动可以启动多个其他活动)。

我意识到除了通过Application和Activity.getApplication()之外,没有“全局”类(或任何其他全局任何东西)的概念。它几乎没用,因为它在Activity的null方法或构造函数中返回onCreate()。这似乎是因为在完全构造对象之前,Activity不会“附加”到Application上下文。

必须有一种方法可以做到这一点并非完全愚蠢,比如在每个活动中重新实施TTS。

替代方法:我使用Intent和startActivity()来启动每个新Activity,那么有没有办法通过Intent.putExtras()传递对toplevel Activity的引用?

3 个答案:

答案 0 :(得分:1)

TextToSpeechContext(活动)绑定,因此您无法真正创建一个可以随处使用的“全局”对象。如果您不想复制代码,请创建基础TtsActivity并在其中放置常用代码。或者,创建一个TtsManager或类似的类,负责初始化等TTS并将其放入需要它的所有活动中。

答案 1 :(得分:0)

如果在您的活动的getApplication()方法中调用,

onCreate()始终会返回有效的引用。如果在activity的构造函数中调用它,它将返回null,但是你不应该为活动定义构造函数。您是否尝试自己致电onCreate()

如果要在Application实例中存储数据,则需要子类Application,并且需要在清单中提供子类的名称

<application android:name="fully.qualified.name.of.my.application.subclass">

答案 2 :(得分:0)

您可以创建一个继承自Object的常规Java类,并将所需的方法放在那里。

修改 我从未使用过Android TTS,但看起来应该是这样的,我会收集

public class SpeechHelper {

   public static void speak(String text, Context con)
   {
        TextToSpeech tts = new TextToSpeech(con, TextToSpeech.onInitListener {
             private void onInit(int status){
                 tts.speak(text, TextToSpeech.QUEUE_ADD, new HashMap<String, String>());
             }
        });
   }
}