Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
#1

Снова про распознавание речи - Android

02.02.2014, 10:57. Просмотров 1240. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
Помогите, пожалуйста, разобраться начинающему)))
Идея такая - при нажатии Button у пользователя запрашивается число, и в дальнейшем ответ обрабатывается.
Использую такой код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MainActivity extends Activity implements OnClickListener {
 
    protected static final int REQUEST_OK = 1;
        private int rec=0;
        // и прочее и прочее
        //.......
public void onClick(View v) {
    Log.e("Test", "click");
    getAnswer();
    Log.e("Test",  "rec = " + rec);
       // здесь дальнейшая обработка значения rec
}
 
private void getAnswer() {
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
        try {
            startActivityForResult(i, REQUEST_OK);
            } catch (Exception e) {
        Toast.makeText(this, "Error initializing speech to text engine.", Toast.LENGTH_LONG).show();
        }
}
 
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
       super.onActivityResult(requestCode, resultCode, data);
           if (requestCode==REQUEST_OK  && resultCode==RESULT_OK) {
            ArrayList <String> thingsYouSaid = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            ]rec =  Integer.parseInt(thingsYouSaid.get(0)); 
               }  
   }   
}
Проблема в том, что getAnswer(), не дожидаясь присвоения значения переменной rec, заканчивает работу, а rec=... срабатывает позже. Соответственно, при первом клике rec=0, затем при втором уже возвращается предыдущее значение и так далее.
Попытки использовать Thread.sleep ничего не дают. Перенести обработку rec в onActivityResult не могу, так как нужно запрашивать число несколько раз из разных мест программы. Как сделать правильно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 10:57     Снова про распознавание речи
Посмотрите здесь:

Android распознавание лиц
Android Синтезатор речи
Снова ImageView Android
Android Распознавание текста с фотографии
Android Снова Bluetooth
Какой программой пользоваться для записи Аудио речи Android
Android Распознавание рукописного ввода
Android Снова про установку шрифта
Android Без интернета не работает распознавание речи в своем приложении
Android Распознавание текста с камеры
Распознавание Android
Android Распознавание речи и клавиатура - время ожидания - необычное поведение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пытливый
991 / 468 / 108
Регистрация: 29.05.2013
Сообщений: 1,955
02.02.2014, 11:04     Снова про распознавание речи #2
Несколько не моя тема, но вот тут по ссылке посмотрите порядок работы с распознаванием речи:
http://www.pandacoder.com/android_speech_recognition/
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
02.02.2014, 11:43  [ТС]     Снова про распознавание речи #3
По ссылке результат распознавания тоже используется лишь в самой onActivityResult, не возвращая его в вызывающую активити
angryrobot
Командир зеленых роботов
346 / 283 / 53
Регистрация: 08.10.2013
Сообщений: 564
02.02.2014, 14:07     Снова про распознавание речи #4
Цитата Сообщение от Sersav Посмотреть сообщение
Перенести обработку rec в onActivityResult не могу, так как нужно запрашивать число несколько раз из разных мест программы.
Это единственный вариант решения вашей проблемы. Я так понимаю, что главная проблема заключается в том, что в методе onActivityResult вам непонятно из какого места кода была запущена распознавалка. Когда вы запускаете активити вызовом метода startActivityForResult, передавайте в качестве второго параметра (вместо REQUEST_OK) некоторое число которое будет уникальным для каждого места вызова этого метода. В методе onActivityResult нужно организовать проверку параметра requestCode который будет таким, какое значение вы передали в метод startActivityForResult когда запускали активити из разных мест.
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
02.02.2014, 15:28  [ТС]     Снова про распознавание речи #5
Я не точно описал. getAnswer используется в цикле, я в примере для наглядности упростил код. Соответственно, начало цикла будет в onClick, а окончание - в onActivityResult ? Пока плохо представляю, как это реализовать, но попробую цикл while сменить на конструкцию if-then-else.
В идеале хотелось бы простой аналог древнего input'a - rec=getAnswer(); запросил у юзера данные - получил ответ, только ввод голосом.
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
03.02.2014, 21:41  [ТС]     Снова про распознавание речи #6
Всем спасибо. Действительно, удалось перенести обработку результата распознавания в onActivityResult. Хотя, по-моему, это скакание из метода в метод ухудшает читаемость кода.
Yandex
Объявления
03.02.2014, 21:41     Снова про распознавание речи
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru