Распознавание речи Android не подключено к службе распознавания -- android поле с участием speech-recognition поле с участием android-speech-api пол Связанный проблема

Android Speech Recognizer not connected to the recognition service


2
vote

проблема

русский

Я хочу ввести функцию постоянного распознавания голоса в моем приложении Android.

Я осознаю тот факт, что распознавание голоса время от времени зависает от времени на Android 4.1.1 и 4.2 и из-за того, что я создал таймер и время от времени проверяю, если распознавание голоса все еще жива или нет, И если это не так, я останавливаю это, а затем начни его. К сожалению, в какой-то момент, когда он пытается перезапустить распознаватель голоса, я получаю что-то подобное:

 <код> SpeechRecognizer not connected to the recognition service   

А в OnError Callback i получите ошибку 8 (документация говорит: error_recognizer_busy), хотя я остановлюсь каждый таймер перед началом распознавания голоса.

Код выглядит так:

 <код> public class MainActivity extends Activity { private SpeechRecognizer mSpeechRecognizer; private RecognitionListener mRecognitionListener;  private Intent mi; private boolean isSpeechRecognizerAlive; Timer myTimer;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      mi = new Intent(getApplicationContext(), MyService.class);      mRecognitionListener = new RecognitionListener(){          @Override         public void onRmsChanged(float rmsdB) {         }          @Override         public void onResults(Bundle results) {             Log.e("recognizer listener", "onResults");              ArrayList<String> result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);             for(int i=0;i<result.size();i++){                 Log.e(String.valueOf(i), result.get(i));             }              startRecognition(new View(getApplicationContext()));         }          @Override         public void onReadyForSpeech(Bundle params) {             Log.e("recognizer listener", "onReadyForSpeech");         }          @Override         public void onPartialResults(Bundle partialResults) {             Log.e("recognizer listener", "onPartialResults");         }          @Override         public void onEvent(int eventType, Bundle params) {             Log.e("recognizer listener", "onEvent");         }          @Override         public void onError(int error) {             Log.e("recognizer listener", "onError: " + String.valueOf(error));              isSpeechRecognizerAlive = false;         }          @Override         public void onEndOfSpeech() {             Log.e("recognizer listener", "onEndOfSpeech");         }          @Override         public void onBufferReceived(byte[] buffer) {             Log.e("recognizer listener", "onBufferReceived");         }          @Override         public void onBeginningOfSpeech() {             Log.e("recognizer listener", "onBeginningOfSpeech");             isSpeechRecognizerAlive = true;         }      };      new CheckRecognizer().execute(""); }  private void checkIfRecognizerAslive(){     Log.e("check", "check");     if(!isSpeechRecognizerAlive){         Log.e("check1", "check1");         stopRecognition(new View(getApplicationContext()));         startRecognition(new View(getApplicationContext()));     } }  @Override protected void onResume() {     super.onResume();     Log.e("Start", "service"); }  @Override protected void onPause() {     super.onPause();     Log.e("Stop", "service"); }   public void startRecognition(View view){     Log.e("MainActivity", "startRecognition");     isSpeechRecognizerAlive = false;     mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());     mSpeechRecognizer.setRecognitionListener(mRecognitionListener);     mSpeechRecognizer.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); }  public void stopRecognition(View view){     Log.e("MainActivity", "stopRecognition");     if(mSpeechRecognizer != null){         mSpeechRecognizer.stopListening();         mSpeechRecognizer.cancel();         mSpeechRecognizer.destroy();         mSpeechRecognizer = null;     } }  private class CheckRecognizer extends AsyncTask<String, Void, String> {     @Override     protected String doInBackground(String... params) {          myTimer = new Timer();         myTimer.schedule(new TimerTask() {                       @Override             public void run() {                 publishProgress();             }          }, 0, 4000);           return "";     }      @Override     protected void onPostExecute(String result) {      }      @Override     protected void onPreExecute() {}      @Override     protected void onProgressUpdate(Void... values) {         checkIfRecognizerAslive();     } }   

}

Я действительно не знаю, что я делаю не так. Можете ли вы помочь мне найти проблему, пожалуйста? Или кто-нибудь знает, почему мой речи хватит, хотя я его уничтожу? Любое предложение приветствуется. Если у вас есть другие предложения о том, как делать постоянное распознавание голоса на Android, это будет здорово. Спасибо много!

Английский оригинал

I want to introduce permanent voice recognition feature in my Android application.

I am aware with the fact that voice recognition freezes from time to time on Android 4.1.1 and 4.2 and because of that I built up a timer and from time to time I check if the voice recognition is still alive or not, and if it's not alive I stop it and then start it. Unfortunately at some point when it tries to restart the voice recognizer, I get something like this:

SpeechRecognizer not connected to the recognition service 

and in onError callback I receive error 8 (documentation says: ERROR_RECOGNIZER_BUSY) even though I stop every timer before starting voice recognizer.

The code looks like this:

public class MainActivity extends Activity { private SpeechRecognizer mSpeechRecognizer; private RecognitionListener mRecognitionListener;  private Intent mi; private boolean isSpeechRecognizerAlive; Timer myTimer;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      mi = new Intent(getApplicationContext(), MyService.class);      mRecognitionListener = new RecognitionListener(){          @Override         public void onRmsChanged(float rmsdB) {         }          @Override         public void onResults(Bundle results) {             Log.e("recognizer listener", "onResults");              ArrayList<String> result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);             for(int i=0;i<result.size();i++){                 Log.e(String.valueOf(i), result.get(i));             }              startRecognition(new View(getApplicationContext()));         }          @Override         public void onReadyForSpeech(Bundle params) {             Log.e("recognizer listener", "onReadyForSpeech");         }          @Override         public void onPartialResults(Bundle partialResults) {             Log.e("recognizer listener", "onPartialResults");         }          @Override         public void onEvent(int eventType, Bundle params) {             Log.e("recognizer listener", "onEvent");         }          @Override         public void onError(int error) {             Log.e("recognizer listener", "onError: " + String.valueOf(error));              isSpeechRecognizerAlive = false;         }          @Override         public void onEndOfSpeech() {             Log.e("recognizer listener", "onEndOfSpeech");         }          @Override         public void onBufferReceived(byte[] buffer) {             Log.e("recognizer listener", "onBufferReceived");         }          @Override         public void onBeginningOfSpeech() {             Log.e("recognizer listener", "onBeginningOfSpeech");             isSpeechRecognizerAlive = true;         }      };      new CheckRecognizer().execute(""); }  private void checkIfRecognizerAslive(){     Log.e("check", "check");     if(!isSpeechRecognizerAlive){         Log.e("check1", "check1");         stopRecognition(new View(getApplicationContext()));         startRecognition(new View(getApplicationContext()));     } }  @Override protected void onResume() {     super.onResume();     Log.e("Start", "service"); }  @Override protected void onPause() {     super.onPause();     Log.e("Stop", "service"); }   public void startRecognition(View view){     Log.e("MainActivity", "startRecognition");     isSpeechRecognizerAlive = false;     mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());     mSpeechRecognizer.setRecognitionListener(mRecognitionListener);     mSpeechRecognizer.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); }  public void stopRecognition(View view){     Log.e("MainActivity", "stopRecognition");     if(mSpeechRecognizer != null){         mSpeechRecognizer.stopListening();         mSpeechRecognizer.cancel();         mSpeechRecognizer.destroy();         mSpeechRecognizer = null;     } }  private class CheckRecognizer extends AsyncTask<String, Void, String> {     @Override     protected String doInBackground(String... params) {          myTimer = new Timer();         myTimer.schedule(new TimerTask() {                       @Override             public void run() {                 publishProgress();             }          }, 0, 4000);           return "";     }      @Override     protected void onPostExecute(String result) {      }      @Override     protected void onPreExecute() {}      @Override     protected void onProgressUpdate(Void... values) {         checkIfRecognizerAslive();     } } 

}

I really don't know what I'm doing wrong. Can you help me find the issue please? Or does anybody know why my speech recognizer is busy even though I destroy it? Any suggestion is welcome. If you have other suggestions on how to do permanent voice recognition on Android it will be great. Thanks a lot!

</div
        

Список ответов

Связанный проблема

7  Мигающий фон  ( Flashing background ) 
У меня есть <код> LinearLayout с несколькими <код> Buttons и <код> TextViews . Я хочу, чтобы мой фон прошился на временных интервалах, скажем из красного до...

0  Android использует RecyClerview с локальной библиотекой RecyClerview вместо загрузки его из Maven Repo  ( Android use recyclerview with local recyclerview library instead of loading it f ) 
Я пытаюсь использовать RecyClerview в моем проекте, но потому что у нас есть несколько плохих прокси, я не могу позволить себе добавить компиляцию <код> "com....

2  Как поставить один за один звонок на удержание? [закрыто]  ( How to put one by one call on hold ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

0  Android-студия «Приложения имеют одинаковое имя пакета»  ( Android studio applications have the same package name ) 
Мое приложение в Android Studio имеет отдельные компоненты для мобильных устройств и для очков Google. Когда я пытаюсь загрузить мобильную версию на Nexus 10 ...

25  Почему приложение умирает случайным образом?  ( Why application is dying randomly ) 
Я разрабатываю приложение для музыкального проигрывателя. Все работает нормально, за исключением внезапно умирает приложение. Иногда это происходит, когда при...

-1  Как изменить странные и даже пункты меню переполнения меню  ( How to change odd and even overflow menu items background ) 
Как изменить странные и даже переполнить пункты меню фон в Android? ...

0  Разбирайте следующий XML с помощью модернизации SimplexML-конвертера с классом POJO  ( Parse the following xml using retrofit simplexml converter with a pojo class ) 
Это моя структура XML <код> <downloads> <item>98cfa929ee93149e245aabf5e4377058</item> <item>498b513aa646d6ef1c407cbeabf6bd20</item> <item>13815d2c0dd53a251b...

9  Phone Gam [Ошибка] CMD: Команда не удалась с помощью выхода кода Enoent  ( Phone gap error cmd command failed with exit code enoent ) 
Я пытаюсь получить разрыв на телефоне работать на Android, и моя команда выводит следующее: <код> phonegap build android [phonegap] detecting Android SDK en...

1  Android - Interstitialad - ресурсы сервисов Google Play не были найдены  ( Android interstitialad the google play services resources were not found ) 
Я пытаюсь добавить межстициализацию в мой проект. Я добавил необходимую библиотеку Скачать сервис Google от Manager SDK Импортировка проекта в качеств...

6  Как использовать OnDateChangedListener, OnDatesetListener без использования DatePickerDialog?  ( How to use ondatechangedlistener ondatesetlistener without using datepickerdial ) 
Я хочу иметь возможность обнаруживать изменения в DatePicker, как только пользователь начинает менять его. Однако я не хочу использовать datrpickerdialog. Кто...

1  Проблема с использованием TextureView с NDK  ( Issue using textureview with ndk ) 
Я работаю над небольшим кусочком кода, используя текстуру, чтобы отобразить результат среды MediaPlayer. Я сталкиваюсь с проблемой, пытающимся смешивать упр...

0  Получить данные с удаленного сервера в Android  ( Get data from remote server in android ) 
Я использую Oracle DB и WEBLOGIC как веб-сервер. Из моего приложения для Android я могу отправлять параметры на мой удаленный сервер .. Моя проблема заключает...

4  Провел жесты на Android в единстве  ( Swipe gestures on android in unity ) 
Я пытаюсь получить единство, чтобы узнать, что я провожу оставить вправо, я решил, что, но моя проблема заключается в том, что это не понимает этого, пока я н...

0  Bitmap.createbitmap имеет все пиксели на 0  ( Bitmap createbitmap has all pixels set to 0 ) 
Я пытаюсь создать растровое изображение из AN INT Array, но полученное растровое изображение все 0. <Сильный> Сценарий У меня есть приложение, которое прин...

1  Первое приложение для Android после Eclipse Установить  ( First app for android after eclipse install ) 
Я искал вокруг и не могу найти точную ситуацию или ответить, что мне нужно, поэтому мне придется задать вопрос, что я уверен, что где-то просил там, поэтому м...

Связанный проблема

7  Мигающий фон 
0  Android использует RecyClerview с локальной библиотекой RecyClerview вместо загрузки его из Maven Repo 
2  Как поставить один за один звонок на удержание? [закрыто] 
0  Android-студия «Приложения имеют одинаковое имя пакета» 
25  Почему приложение умирает случайным образом? 
-1  Как изменить странные и даже пункты меню переполнения меню 
0  Разбирайте следующий XML с помощью модернизации SimplexML-конвертера с классом POJO 
9  Phone Gam [Ошибка] CMD: Команда не удалась с помощью выхода кода Enoent 
1  Android - Interstitialad - ресурсы сервисов Google Play не были найдены 
6  Как использовать OnDateChangedListener, OnDatesetListener без использования DatePickerDialog? 
1  Проблема с использованием TextureView с NDK 
0  Получить данные с удаленного сервера в Android 
4  Провел жесты на Android в единстве 
0  Bitmap.createbitmap имеет все пиксели на 0 
1  Первое приложение для Android после Eclipse Установить