未绑定到 TTS 引擎



我正在尝试制作口语词典。

LogCat 显示"已成功绑定到 com.android.tts",但当"发言"按钮单击时,它会显示"失败说话:未绑定到 tts 引擎"。

但是在 AVD 上它运行平稳,为什么?

这是我的goTranslator类:

package sk.team;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.speech.tts.TextToSpeech;
import android.widget.Toast;
import android.content.Intent;
import android.content.res.Configuration;
import java.util.Locale;
public class goTranslator extends Activity implements TextToSpeech.OnInitListener{
    private int MY_DATA_CHECK_CODE = 0;
    private TextToSpeech tts;
    private SQLiteDatabase db = null;
    private Cursor translatorCursor = null;
    private EditText txtSearch;
    private EditText txtResult;
    private AppDatabase dbtranslator = null;
    private RadioButton Eng,Ind;
    private Button Translate,Speak;
    public static final String ENGLISH = "english";
    public static final String INDONESIA = "indonesia";
    public void onInit(int status) { 
        if (status == TextToSpeech.SUCCESS) {
            Toast.makeText(goTranslator.this,
                    "Text-To-Speech engine is initialized", Toast.LENGTH_LONG).show();
        } else if (status == TextToSpeech.ERROR) {
            Toast.makeText(goTranslator.this,
                    "Error occurred while initializing Text-To-Speech engine",
                    Toast.LENGTH_LONG).show();
        }
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MY_DATA_CHECK_CODE) {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                tts = new TextToSpeech(this, this);
            } else {
                Intent installIntent = new Intent();
                installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installIntent);
            }
        }
    }
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        dbtranslator = new AppDatabase(this);
        db = dbtranslator.getWritableDatabase();
        setContentView(R.layout.main);
        dbtranslator.createTable(db);
        dbtranslator.generateData(db);
        Eng = (RadioButton) findViewById(R.id.Eng);
        Ind = (RadioButton) findViewById(R.id.Ind);
        Translate = (Button) findViewById(R.id.Translate);
        Speak = (Button) findViewById(R.id.Speak);
        txtSearch = (EditText) findViewById(R.id.txtSearch);
        txtResult = (EditText) findViewById(R.id.txtResult);
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
        Speak.setOnClickListener(new View.OnClickListener() {   
            public void onClick(View v) {
                String text = txtResult.getText().toString();
                if (text!=null && text.length()>0) {
                    Toast.makeText(goTranslator.this, "Saying: " + text,
                            Toast.LENGTH_LONG).show();
                    tts.speak(text, TextToSpeech.QUEUE_ADD, null);
                }
            }
        });
    }
    public void Translate (View view) {
        if (view == Translate) {
            if (Eng.isChecked()) {
                txtSearch.setHint("Masukkan Kata");
                Locale loc = new Locale ("es_ES");
                tts.setLanguage(loc);
                String result = "";
                String englishword = txtSearch.getText().toString().trim().toLowerCase();
                translatorCursor = db.rawQuery("SELECT ID, ENGLISH, INDONESIA "
                        + "FROM translator where ENGLISH='" + englishword
                        + "' ORDER BY ENGLISH", null);
                if (translatorCursor.moveToFirst()) {
                    result = translatorCursor.getString(2);
                    for (; !translatorCursor.isAfterLast(); translatorCursor.moveToNext()) {
                        result = translatorCursor.getString(2);
                    }
                }
                if (result.equals("")) {
                    result = "Kata Tidak Tersedia";
                }
                txtResult.setText(result);
            }
            if (Ind.isChecked()) {
                txtSearch.setHint("Enter Word");
                Locale loc = new Locale ("en_US");
                tts.setLanguage(loc);
                String result = "";
                String indonesiaword = txtSearch.getText().toString().trim().toLowerCase();
                translatorCursor = db.rawQuery("SELECT ID, ENGLISH, INDONESIA "
                        + "FROM translator where INDONESIA='" + indonesiaword
                        + "' ORDER BY INDONESIA", null);
                if (translatorCursor.moveToFirst()) {
                    result = translatorCursor.getString(1);
                    for (; !translatorCursor.isAfterLast(); translatorCursor.moveToNext()) {
                        result = translatorCursor.getString(1);
                    }
                }
                if (result.equals("")) {
                    result = "Result Not Found";
                }
                txtResult.setText(result);
            }
        }
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.main);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        if (translatorCursor != null) {
            translatorCursor.close();
            db.close();
        }
    }
}
Log.w(TAG, method + " failed: not bound to TTS engine");

我造成的

mServiceConnection;

为空

您的测试设备是否缺少互联网连接?

最新更新