3

複数のアクティビティのTTSを控えめに使用したいと思います(1つのメインアクティビティで他の複数のアクティビティを開始できます)。

Applicationとを経由する以外に、「グローバル」クラス(またはその他のグローバルなもの)の概念はないことを理解していますActivity.getApplication()nullアクティビティのonCreate()メソッドまたはコンストラクターで返されるため、ほとんど役に立ちません。これは、オブジェクトが完全に構築されるまで、アクティビティがアプリケーションコンテキストに「アタッチ」されていないためと思われます。

すべてのアクティビティでTTSを再実装するなど、完全に馬鹿げていない方法が必要です。

別の方法:インテントを使用startActivity()して新しいアクティビティを開始するので、トップレベルのアクティビティへの参照を渡す方法はありIntent.putExtras()ますか?

4

3 に答える 3

1

TextToSpeechは(アクティビティ)に関連付けられているContextため、どこでも使用できる「グローバル」オブジェクトを実際に作成することはできません。コードを複製したくない場合は、ベースTtsActivityを作成し、そこに共通のコードを配置します。または、TtsManager初期化などを処理するまたは同様のクラスを作成します。TTSを作成し、それを必要とするすべてのアクティビティに配置します。

于 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 に答える