Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
1

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

02.02.2014, 10:57. Просмотров 1431. Ответов 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 не могу, так как нужно запрашивать число несколько раз из разных мест программы. Как сделать правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 10:57
Ответы с готовыми решениями:

Распознавание речи и клавиатура - время ожидания - необычное поведение
Столкнулся с необычной проблемой. Использую распознавание речи.. То есть при...

Без интернета не работает распознавание речи в своем приложении
Android 4.1.2. Без интернета не работает распознавание речи в своем приложении,...

Снова про установку шрифта
Поискал на форуме, но так и не нашел ответа на один вопрос - каким образом...

Синтезатор речи
люди подскажите как сделать синтезатор речи? какие нужны библиотеки.

Динамический вывод распознавания речи
Как можно сделать динамический вывод голоса в текст? То есть во время разговора...

5
Пытливый
1380 / 691 / 249
Регистрация: 29.05.2013
Сообщений: 3,116
02.02.2014, 11:04 2
Несколько не моя тема, но вот тут по ссылке посмотрите порядок работы с распознаванием речи:
http://www.pandacoder.com/android_speech_recognition/
0
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
02.02.2014, 11:43  [ТС] 3
По ссылке результат распознавания тоже используется лишь в самой onActivityResult, не возвращая его в вызывающую активити
0
angryrobot
Командир зеленых роботов
348 / 285 / 54
Регистрация: 08.10.2013
Сообщений: 565
02.02.2014, 14:07 4
Цитата Сообщение от Sersav Посмотреть сообщение
Перенести обработку rec в onActivityResult не могу, так как нужно запрашивать число несколько раз из разных мест программы.
Это единственный вариант решения вашей проблемы. Я так понимаю, что главная проблема заключается в том, что в методе onActivityResult вам непонятно из какого места кода была запущена распознавалка. Когда вы запускаете активити вызовом метода startActivityForResult, передавайте в качестве второго параметра (вместо REQUEST_OK) некоторое число которое будет уникальным для каждого места вызова этого метода. В методе onActivityResult нужно организовать проверку параметра requestCode который будет таким, какое значение вы передали в метод startActivityForResult когда запускали активити из разных мест.
1
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(); запросил у юзера данные - получил ответ, только ввод голосом.
0
Sersav
0 / 0 / 0
Регистрация: 01.02.2014
Сообщений: 5
03.02.2014, 21:41  [ТС] 6
Всем спасибо. Действительно, удалось перенести обработку результата распознавания в onActivityResult. Хотя, по-моему, это скакание из метода в метод ухудшает читаемость кода.
0
03.02.2014, 21:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 21:41

Посоветуйте движок распознавания речи
Здравствуйте! Посоветуйте, пожалуйста, движок для преобразования голосовых...

Приложение сворачивается при распознании речи
Ребят, такая проблема, сделал распознавание голоса через гугл, но когда во...

Скрыть диалог появляющийся при распознавании речи
Как сделать что бы не выскакивал белый прямоугольник при распознавание речи при...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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