1

だから私は少し問題があります。GCM を介して受信したメッセージに基づいてアプリを動作させようとしています。この場合、TextToSpeech クラスを使用して音を出すことになっています。うまくいきますが、初めてメッセージを送信するときではありません。これはおそらく TextToSpeech がインスタンス化されていないためだと思いますが、どうやってそれを行うのかわかりませんか? onInit() を試してみましたが、まったく機能しませんでした。

また、私の例で TTS をシャットダウンする最良の方法は何ですか?

免責事項: 私は PHP のバックグラウンドを持っており、Java の知識はほとんどありません。私は実践することで学ぼうとしているので、これがばかげた質問である場合はご容赦ください。前もって感謝します!

public class GCMIntentService extends GCMBaseIntentService {

private static final String TAG = "GCMIntentService";
public static TextToSpeech mtts;

public GCMIntentService() {
    super(SENDER_ID);
}

@Override
protected void onMessage(Context context, Intent intent) {
    Log.i(TAG, "Received message");
    String message = intent.getExtras().getString("message");
    mtts = new TextToSpeech(context, null);

    if (message.startsWith("makeSound")) {
        mtts = new TextToSpeech(context, null);
        mtts.setLanguage(Locale.US);
        mtts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
    }
}
}
4

1 に答える 1

0

TextToSpeech の初期化は非同期であるため、最初は機能しません。単純にインスタンス化して、そのまま使用することはできません。すぐに使用したい場合は、TextToSpeech が初期化された後に呼び出されるコールバックを提供する必要があります。

 mTextToSpeech = new TextToSpeech( this, new TextToSpeech.OnInitListener()
    {
        @Override
        public void onInit( int status )
        {
            // Check for status might not be initialized due to errors
            // Configure language/speed
        }
    } );

mtts は静的であるため、残りの時間は機能します。これは、それがクラス変数であり、サービスの新しいインスタンスを作成するときに破棄/初期化されないことを意味します。このサービスを 2 回目に使用するまでに、この変数は最初のサービス実行で既に初期化されています。

于 2012-12-14T15:10:52.193 に答える