我想从几个活动中节省使用TTS(一个MAIN活动可以启动多个其他活动)。
我意识到除了通过Application和Activity.getApplication()
之外,没有“全局”类(或任何其他全局任何东西)的概念。它几乎没用,因为它在Activity的null
方法或构造函数中返回onCreate()
。这似乎是因为在完全构造对象之前,Activity不会“附加”到Application上下文。
必须有一种方法可以做到这一点并非完全愚蠢,比如在每个活动中重新实施TTS。
替代方法:我使用Intent和startActivity()
来启动每个新Activity,那么有没有办法通过Intent.putExtras()
传递对toplevel Activity的引用?
答案 0 :(得分:1)
TextToSpeech
与Context
(活动)绑定,因此您无法真正创建一个可以随处使用的“全局”对象。如果您不想复制代码,请创建基础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>());
}
});
}
}