首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCM不工作的TextToSpeech

GCM不工作的TextToSpeech
EN

Stack Overflow用户
提问于 2015-10-26 04:18:03
回答 1查看 346关注 0票数 0

我正在将TextToSpeech合并到gcmquickstart示例中。在收到来自google服务器的消息后,我尝试使用tts来表达它们。在说话之前总要去毁灭。但是,如果使用调试模式,则tts可以正常工作。守则如下:

代码语言:javascript
复制
public class MyGcmListenerService extends GcmListenerService implements TextToSpeech.OnInitListener {

private static final String TAG = "MyGcmListenerService";
private TextToSpeech tts;
private String ttsMessage;

public void onInit(int code) {
    if (code == TextToSpeech.SUCCESS) {
        if (tts != null) {

            if (Charset.forName("US-ASCII").newEncoder().canEncode(ttsMessage)) {
                tts.setLanguage(Locale.ENGLISH);
            } else {
                tts.setLanguage(Locale.CHINESE);
            }

            tts.speak(ttsMessage, TextToSpeech.QUEUE_FLUSH, null);
            Log.d(TAG, "tts speak!!!");
        }
        Log.d(TAG, "tts initialized!!!");
    } else {
        tts = null;
    }
}

public void onDestroy() {
    //Close the Text to Speech Library
    if(tts != null) {

        tts.stop();
        tts.shutdown();
        Log.d(TAG, "TTS Destroyed");
    }
    super.onDestroy();
}

public void onMessageReceived(String from, Bundle data) {
    ttsMessage = message;
    if (tts == null) {
        tts = new TextToSpeech(this, this);
    }
}
// [END receive_message]

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-26 07:05:45

我找到了解决办法,不是最好的,但有效。

在onMessageReceived中运行一个无限循环,这样就不会破坏tts。当tts完成其工作时,跳出循环。

代码语言:javascript
复制
    public class MyGcmListenerService extends GcmListenerService implements TextToSpeech.OnInitListener {

    private static final String TAG = "MyGcmListenerService";
    private TextToSpeech tts;
    private String ttsMessage;
    private boolean keepAlive = true;

    @Override
    public void onInit(int code) {
        if (code == TextToSpeech.SUCCESS) {
            if (tts != null) {

                if (Charset.forName("US-ASCII").newEncoder().canEncode(ttsMessage)) {
                    tts.setLanguage(Locale.ENGLISH);
                } else {
                    tts.setLanguage(Locale.CHINESE);
                }


                tts.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                    @Override
                    public void onStart(String utteranceId) {
                    }

                    @Override
                    public void onDone(String utteranceId) {
                        keepAlive = false;
                    }

                    @Override
                    public void onError(String utteranceId) {
                    }
                });
                HashMap<String, String> map = new HashMap<String, String>();
                map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"messageID");
                tts.speak(ttsMessage, TextToSpeech.QUEUE_FLUSH, map);
            }

            Log.d(TAG, "tts speak!!!");
        } else {
            tts = null;
            keepAlive = false;
        }
    }

    public void onDestroy() {
    //Close the Text to Speech Library
    if(tts != null) {

        tts.stop();
        tts.shutdown();
        Log.d(TAG, "TTS Destroyed");
    }
    super.onDestroy();
    }

    public void onMessageReceived(String from, Bundle data) {
    ttsMessage = message;
    if (tts == null) {
        tts = new TextToSpeech(this, this);
    }
        keepAlive = true;

        while (keepAlive) {
            Log.d(TAG, "looping");
            ;
        }
    }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33338402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档