Я пытаюсь создать текстовый редактор в собственном классе менеджера.TTS (Text to Speech): менеджер в своем классе
В настоящее время мой код выглядит следующим образом:
public class TTSManager extends Activity implements OnInitListener{
private TextToSpeech myTTS;
private int MY_DATA_CHECK_CODE = 0;
private boolean readyToSpeak = false;
public TTSManager()
{
;
}
public void checkIfTTSModulesInstalled()
{
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
}
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
myTTS = new TextToSpeech(this, this);
}
else
{
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
@Override
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
if(myTTS.isLanguageAvailable(Locale.US) == TextToSpeech.LANG_AVAILABLE)
{
myTTS.setLanguage(Locale.US);
readyToSpeak = true;
}
}
}
public void speak(String text)
{
if (readyToSpeak)
myTTS.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
К сожалению, я получаю исключение нулевого указателя при попытке инициализировать модуль TTS. Как я могу создать диспетчер TTS - это собственный класс (а не непосредственно в рамках деятельности, в которой следует использовать TTS)?
Привет, насколько я вижу, вы проверяете, установлен ли TTS по-другому. Является ли проверка только установленного пакета (-name)? – nr1
Я проверяю, установлен ли какой-либо конкретный движок TTS, но вам не нужно это делать, если вы используете стандартный. Если вы проверяете, установлены ли данные TTS с помощью 'startActivityForResult()', 'onActivityResult()' должен находиться в действительной активности. Дело в том, что менеджер может разместить объект TextToSpeech и позаботиться о его инициализации, настройке и уничтожении, но он все равно должен быть вызван действием. –
Еще один вопрос: возможно ли безопасный и отличный способ проверить, доступна ли TTS? Не достаточно ли проверить, является ли какой-либо пакет (имя) доступным на устройстве? – nr1