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

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

02.02.2014, 10:57. Просмотров 1560. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 10:57
Ответы с готовыми решениями:

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

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

Распознавание речи (Стандартный Google, Pocketsphinx, данные voice.mozilla.org) и др
Здравствуйте. Пишу первый раз программу на android и мне нужно распознавание речи. 1) Для...

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

Распознавание речи
Можно ли микроконтроллером авр распознавать речь? Хотя бы одно слово. В интернете ничего...

5
Пытливый
1544 / 815 / 295
Регистрация: 29.05.2013
Сообщений: 3,869
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
Командир зеленых роботов
349 / 286 / 54
Регистрация: 08.10.2013
Сообщений: 569
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
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2014, 21:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Распознавание речи
Пожалуйста помогите как распознавать звук в языке VB_6.0. У меня курсовая работа срок до...

Распознавание речи
Привет. Есть такой вопрос: Прикручиваю к своему приложению на андроид (Xamarin.Forms)...

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


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

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

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