Я новичок в разработке 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);
}
}
Заранее благодарим за любую помощь, которую любой может дать начинающему, как я.
Дон Тилли
На устройстве или эмуляторе в */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);
}
}
}