1

次のチュートリアルを参照して、テキスト読み上げテストアプリケーションを実行したいと思います:http://android-developers.blogspot.com.es/2009/09/introduction-to-text-to-speech-in.html

チュートリアルの内容を試してみましたが、スペイン語のみに言語を設定しています。

mTts = new TextToSpeech(this, this);
   Locale loc = new Locale ("spa", "ESP");
   mTts.setLanguage(loc);

また、私はこれをやってみました(動作しません):

// Specify the exact voice you are checking for
checkIntent.putExtra(TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR,"spa-ESP");

問題は、アプリが起動すると、ドイツ語、スペイン語、フランス語、イタリア語の4つの言語をダウンロードするように求める画面が表示されることです。スペイン語のみをダウンロードしてから戻るキーを押すとアプリは動作しますが、アプリを起動するたびに、他の3つの言語をダウンロードするための同じ画面が表示され、foru言語をダウンロードした場合にのみ表示が停止します。

私の目的は、スペイン語のみをダウンロードするようにユーザーに促し、言語のダウンロードダイアログを常にではなく1回だけ表示することです。

4.1を搭載したNexusSフォンでテストしています

これは完全なコードです:

public class MainActivity extends Activity implements OnInitListener {  
    private static final int MY_DATA_CHECK_CODE = 0;
    EditText editText;
    Button button;
    private TextToSpeech mTts;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editText = (EditText) findViewById(R.id.editText);
    button = (Button) findViewById(R.id.button);    

    editText.setText("Estoy probando, porque hay que probar.");                 

    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

    button.setOnClickListener(new OnClickListener() {           
        @Override
        public void onClick(View v) {
            mTts.speak(editText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);              
        }
    });
}

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

            mTts = new TextToSpeech(this, this);
            Locale loc = new Locale ("spa", "ESP");
            mTts.setLanguage(loc);
        }
    }
}

@Override
public void onInit(int arg0) {}
}

あなたが私が解決策を見つけるのを手伝ってくれることを願っています

ご挨拶

4

1 に答える 1

1

ロケールを作成するには、MARC コードではなく、 ISO-639-1 / ISO-3166-1コードを使用してはなりません: Locale loc = new Locale ("es");. Locale クラス リファレンスの「クラスの概要」セクションも参照してください。

于 2013-03-13T15:11:23.273 に答える