Android SpeechRecognizer следует использовать только из основного потока приложения.

Я пытаюсь интегрировать некоторые из Android Speech APIS в свою игру на AndEngine.

Я поместил свой код в действие BaseGame, однако эта ошибка появляется во время выполнения:

05-06 23: 51: 28.955: ERROR / AndroidRuntime (553): java.lang.RuntimeException: SpeechRecognizer следует использовать только из основного потока приложения

Как мне получить доступ к основному потоку приложения? И как я могу убедиться, что мой речевой код работает в нем.

Настройка выглядит следующим образом:

Основной класс - BaseGameActivity SpeechClass

Основной класс создает новый SpeechClass + вызывает его метод - тогда я получаю указанную выше ошибку.

Посоветуйте, пожалуйста, как я могу это правильно сделать.


person RenegadeAndy    schedule 11.05.2011    source источник


Ответы (1)


Вызовите SpeechClass в основном потоке, выполнив примерно следующее:

final SpeechClass c = getSpeechClass(); // get the speech class

View v = findViewById(R.id.anyview); //fetch a View: any one will do

v.post(new Runnable(){ public void run(){ c.doSomething(); }});

Это должно запустить его в основном потоке. Может замедлить работу вашего пользовательского интерфейса, если doSomething потребуется время, но вы должны это решить.

person Femi    schedule 11.05.2011
comment
Привет! Я попытался добавить это, но теперь он выдает: 05-11 19: 37: 24.894: ОШИБКА / AndroidRuntime (2165): Вызвано: android.util.AndroidRuntimeException: requestFeature () должен быть вызван перед добавлением содержимого - person RenegadeAndy; 11.05.2011
comment
Ах, это, вероятно, означает, что некоторая часть того, что вы делаете, вызывает requestFeature(): вам может потребоваться выполнить настройку речевых битов, прежде чем вы установите представление содержимого Activity, что было бы небольшой проблемой с методом post. Попробуйте создать Handler и использовать его для запуска метода класса речи. - person Femi; 11.05.2011
comment
Полагаю, вы имеете в виду одно из следующих: developer.android.com/reference/android/ os / Handler.html, но у меня нет практических знаний, чтобы выяснить, что именно изменится! - person RenegadeAndy; 11.05.2011
comment
Небольшой компактный учебник (ура, Google): tutorialforandroid.com/2009 /01/using-handler-in-android.html - person Femi; 11.05.2011