UtteranceProgressListener未在21以上的api级别调用

问题描述 投票:1回答:1

我想知道为什么我的UtteranceProgressListener没有被调用。这是我试图这样做的方式

 private UtteranceProgressListener progressListener=new UtteranceProgressListener() {
    @Override
    public void onStart(String utteranceId) {
        Log.d("modroid", "speech started");

    }

    @Override
    public void onDone(String utteranceId) {
        Log.d("modroid", "done");
    }

    @Override
    public void onError(String utteranceId) {
        Log.d("modroid", "error");

    }
};

  private void prepareTxtToSpeech() {
    textToSpeech = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                if (textToSpeech.isLanguageAvailable(Locale.US) == TextToSpeech.LANG_AVAILABLE) {
                    textToSpeech.setLanguage(Locale.ENGLISH);
                    textToSpeech.setSpeechRate(0.8f);
                    textToSpeech.setOnUtteranceProgressListener(progressListener);
                }
            } else if (status == TextToSpeech.ERROR) {
                Toast.makeText(context, context.getString(R.string.txttospeech_error), Toast.LENGTH_LONG).show();
            }
        }
    });
}

这是我如何称呼说话方法

   public void speak(String text) {
    if (textToSpeech != null) {

        Log.d("modroid", "speaking: ");
        textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "some id");
    }
}

我知道以前曾问过这类问题,但没有任何帮助。请让我知道我在哪里做错了。

android text-to-speech
1个回答
1
投票

如果语言可用以及语言设置正确,您必须小心“验证”:

    switch (textToSpeech.isLanguageAvailable(Locale.US)){

        case TextToSpeech.LANG_AVAILABLE:
            break;
        case TextToSpeech.LANG_COUNTRY_AVAILABLE:
            break;
        case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
            break;
        case TextToSpeech.LANG_MISSING_DATA:
            break;
        case TextToSpeech.LANG_NOT_SUPPORTED:
            break;
    }

你也应该以同样的方式检查textToSpeech.setLanguage(Locale.ENGLISH)的反应。

前三名中的一个可能会被你接受。否则,您需要处理该问题。

setLanguage()

isLanguageAvailable()

© www.soinside.com 2019 - 2024. All rights reserved.