3

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

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

必须有一种不完全愚蠢的方法来做到这一点,比如在每个活动中重新实现 TTS。

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

4

3 回答 3

1

TextToSpeech is tied to a Context (Activity), so you can't really make a 'global' object you can just use anywhere. If you don't want to duplicate code, create an base TtsActivity and put common code there. Or, create a TtsManager or similar class that takes care of initializing, etc. TTS and put it in all activities that need it.

于 2012-10-10T02:46:56.740 回答
0

getApplication()如果从您的活动onCreate()方法中调用,则始终返回有效引用。如果在活动的构造函数中调用它将返回null,但无论如何您都不应该为活动定义构造函数。你想给自己打电话onCreate()吗?

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

<application android:name="fully.qualified.name.of.my.application.subclass">
于 2012-10-09T19:44:31.630 回答
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>());
             }
        });
   }
}
于 2012-10-09T19:46:18.400 回答