代码之家  ›  专栏  ›  技术社区  ›  meri294

为什么我的TTS不工作?

  •  1
  • meri294  · 技术社区  · 9 年前

    我有以下代码:

    package audiovisuales.aventuresengulpiyuri;
    
    import android.content.Intent;
    import android.speech.tts.TextToSpeech;
    import android.speech.tts.TextToSpeech.OnInitListener;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import util.Utilidades;
    
    public class PaginaPrimera  extends AppCompatActivity implements OnInitListener{
    
        private TextToSpeech tts;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_pagina_primera);
            if (!Utilidades.verificaConexion(this)){
               Utilidades.mostrarVentanaErrorDeConexion(this);
            }
            else if(Portada.getLecturaAutomatica()){
                tts= new TextToSpeech(PaginaPrimera.this, this);
                tts.speak(getResources().getString(R.string.primeraPagina), TextToSpeech.QUEUE_FLUSH, null);
            }
        }
    

    我设置的最小API是API 19。我检查了它是否进入else块,并检测到要告诉的文本,但当我执行时,它什么也没说。

    1 回复  |  直到 9 年前
        1
  •  0
  •   tasomaniac    9 年前

    您需要检查设备上是否有TTS。

    首先,在您的 onCreate 方法如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, REQUEST_DATA_CHECK_CODE);
    }
    

    然后在你身上 onActivityResult ,检查是否可以使用TTS。

    protected void onActivityResult(
            int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_DATA_CHECK_CODE) {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                // success, create the TTS instance
                mTts = new TextToSpeech(this, this);
            } else {
                // missing data, install it
                Intent installIntent = new Intent();
                installIntent.setAction(
                        TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installIntent);
            }
        }
    }
    

    然后检查设备的语言是否可用。

    if (mTts.isLanguageAvailable(Locale.getDefault()) >= 0) {
        mTts.setLanguage(Locale.getDefault());
        mTts.speak(textToBeSpoken, TextToSpeech.QUEUE_FLUSH, null);
    }
    

    如果语言不可用,您可以尝试安装该语言的数据,也可以更改语言。