Ошибка в разрешении класса TextToSpeech для разработки Android

1

Я новичок в разработке Android, Eclipse и Java (в основном программировании .Net и IVR до сих пор), поэтому, когда я попытался скомпилировать и запустить образец приложения, которое я нашел для TTS на Droid, я не был удивился, что сразу получил ошибку времени выполнения. Ошибка:

dalvikvm Не удалось разрешить com/sample/TTSapp/AndroidTTSapp; интерфейс 4 'android/speech/tts/TextToSpeech $OnInitListner;

Я полагаю, что метод OnInitListner должен быть в одном из классов, который был установлен, когда я установил Android SDK (релиз 1.6 R1, я считаю), но я не уверен, как импортировать связанный модуль класса в текущую программу. Я не могу найти речевой /tts/TextToSpeech каталог в любой точке моей системы. Мне нужно загрузить этот каталог откуда-нибудь? Ниже приведен исходный код Java для демонстрационной программы TTS, которую я пытаюсь запустить:


пакет com.sample.TTSApp;

import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; импортировать android.view.View; import android.widget.Button; import com.sample.TTSApp.R; import java.util.Locale; import java.util.Random; Открытый класс AndroidTTSapp расширяет активность TextToSpeech.OnInitListener   {   private static final String TAG = "TextToSpeechDemo",
  частные TextToSpeech mTts;   private Button mAgainButton;   @Override   public void onCreate (Bundle savedInstanceState)     {  super.onCreate(savedInstanceState);       setContentView (R.layout.main);      // Инициализация текста в речь. Это асинхронная операция.
     //OnInitListener (второй аргумент) вызывается после завершения инициализации.      // Создание объекта TextToSpeech.OnInitListener
     mTts = новый TextToSpeech (это, это);      mAgainButton = (кнопка) findViewById (R.id.again_button);

   mAgainButton.setOnClickListener(new View.OnClickListener() 
        {
  public void onClick(View v)
    {
    sayHello();
       }
      });
  } 
 @Override
 public void onDestroy() 
    {        // Don't forget to shutdown! 
    if (mTts != null) 
       {
        mTts.stop();
        mTts.shutdown();
       }
    super.onDestroy();

}  // реализует TextToSpeech.OnInitListener.

  public void onInit(int status)
  {
  // status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.
  if (status == TextToSpeech.SUCCESS) 
     {       
      int result = mTts.setLanguage(Locale.US);
      if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) 
         {
           // Language data is missing or the language is not supported.
           Log.e(TAG, "Language is not available.");  
         }
  else
     {
         // Check the documentation for other possible result codes. For example, the language may be available for the locale
   // but not for the specified country and variant.      
         // The TTS engine has been successfully initialized. Allow the user to press the button for the app to speak again. 
         mAgainButton.setEnabled(true);
     // Greet the user
      sayHello();
      }             

}    еще        {        // Ошибка инициализации.           Log.e(TAG, "Не удалось инициализировать TextToSpeech." );     }    };

 private static final Random RANDOM = new Random();
 private static final String[] HELLOS = 
 { 
  "Hello World",  "This is Text to speech demo by Zahid Shaikh"   
 };

 private void sayHello() 
 {
 // Select a random hello.
 int i =0; 
 int helloLength = HELLOS.length;
 String hello = HELLOS[i];
 i++;
 if(i == helloLength) i =0;
 mTts.speak(hello,TextToSpeech.QUEUE_FLUSH,null);
 } 

}

Заранее благодарим за любую помощь, которую любой может дать начинающему, как я.

Дон Тилли

Теги:

1 ответ

0

На устройстве или эмуляторе в */system/tts/lang_pico/* должны быть tts-lang файлы (*.bin).

Пример инициализации TTS:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ........
    ........
    initTTS();
}

private void initTTS() {
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == MY_DATA_CHECK_CODE) {
    if(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
    mTts = new TextToSpeech(this, this);
    } else {
    Intent installIntent = new Intent();
    installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
    startActivity(installIntent);
        }
    }
}
public void onInit(int status) {
    if(status == TextToSpeech.SUCCESS) {
        int result = mTts.setLanguage(Locale.US);
                if(result == TextToSpeech.LANG_AVAILABLE
                   || result == TextToSpeech.LANG_COUNTRY_AVAILABLE) {
                         mTts.speak("Start system", TextToSpeech.QUEUE_FLUSH, null);
                }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню