Pergunta

I'm trying to make speaking dictionary.

LogCat shows "Successfully bound to com.android.tts" but when the Speak button clicked, it shows "failed speak : not bound to tts engine".

But on AVD it runs smoothly, why?

This Is my goTranslator class:

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();
        }
    }
}
Foi útil?

Solução

Log.w(TAG, method + " failed: not bound to TTS engine");

I caused by

mServiceConnection;

Being null

Does your testing device lack an internet connection?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top