2014-12-02 2 views
4

В моей основной деятельности я запускаю новый Intent:RecognizerIntent.ACTION_RECOGNIZE_SPEECH заблокирован, когда кран происходит

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "What would you like to find?\n For example \"Open heart surgery\""); 
startActivityForResult(intent, SPEECH_REQUEST); 

Потом восстановить ключевые слова, которые были произнесенные здесь:

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
     Intent data) { 
    if (requestCode == SPEECH_REQUEST && resultCode == RESULT_OK) { 
     List<String> results = data.getStringArrayListExtra(
       RecognizerIntent.EXTRA_RESULTS); 
     String spokenText = results.get(0); 

      Intent intent = new Intent(ApiDemoActivity.this,SearchActivity.class); 
      intent.putExtra("keyword", spokenText); 
      startActivity(intent); 
      finish(); 

    } 
    super.onActivityResult(requestCode, resultCode, data); 
    } 

Теперь все это работает только хорошо, но я заметил проблему. Во время RecognizerIntent.ACTION_RECOGNIZE_SPEECH .. если я коснусь стекла Google (каким-либо образом на D-pad), это приведет к ошибке распознавания голоса. Это означает, что он отказывается обнаруживать какой-либо звук. Что может вызвать эту проблему?

Logcat Update

Я получаю две основные ошибки во время SPEECH_REQUEST, когда я нажимаю на DPad:

12-08 10:12:58.687: E/SpeechRecognizer(940): not connected to the recognition service 

12-08 10:12:58.695: E/GlassRecognitionService[41e733b8](940): VoiceService disconnected. 

Logcat:

12-03 09:45:06.513: E/SpeechRecognizer(847): not connected to the recognition service 
12-03 09:45:06.513: I/BroadcastingVoiceInputCallback[425b67c8](847): Unregistered GlassRecognitionService 
12-03 09:45:06.513: E/GlassRecognitionService[42b01bf0](847): VoiceService disconnected. 
12-03 09:45:06.521: I/RecognizerController(847): stopListening 
12-03 09:45:06.521: I/RecognizerController(847): detachVoiceInputCallback 
12-03 09:45:06.521: I/RecognizerFactory(847): deactivate() called on no-op recognizer, nothing to do. 
12-03 09:45:06.521: I/VoiceEngine[425ecfd8](847): Setting active recognizer: VoiceConfig [] 
12-03 09:45:06.521: I/RecognizerFactory(847): activate() called on no-op recognizer, nothing to do. 
12-03 09:45:06.521: I/RecognizerController(847): cancel 
12-03 09:45:06.537: D/dalvikvm(847): threadid=47: thread exiting, not yet detached (count=0) 
12-03 09:45:06.545: D/native_audio_voice_microphone(847): *** Close native audio interface for GlassVoice. NativeAudioInterfaceWrapper_nativeClose() *** 
12-03 09:45:06.552: I/ConcurrentAudioInterface[4256aec8](847): Closed audio interface. 

затем пару секунд спустя:

12-03 09:45:16.295: V/GlassNotification(589): Received notification id: 1 packageName: com.google.glass.settings.ui 
12-03 09:45:16.295: V/GlassNotification(589): skipping since notification not whitelisted 
12-03 09:45:19.529: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0xd9 
12-03 09:45:19.529: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x17b 
12-03 09:45:19.537: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x234 
12-03 09:45:19.537: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x315 
12-03 09:45:19.592: D/dalvikvm(770): GC_CONCURRENT freed 386K, 8% free 5774K/6212K, paused 14ms+2ms, total 46ms 
12-03 09:45:32.279: V/GlassNotification(589): Received notification id: 1 packageName: com.google.glass.settings.ui 
12-03 09:45:32.279: V/GlassNotification(589): skipping since notification not whitelisted 
12-03 09:45:43.490: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0xd9 
12-03 09:45:43.498: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x17b 
12-03 09:45:43.506: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x234 
12-03 09:45:43.506: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x315 
12-03 09:45:44.412: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0xd9 
12-03 09:45:44.412: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x17b 
12-03 09:45:44.420: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x234 
12-03 09:45:44.420: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x315 
12-03 09:45:45.638: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0xd9 
12-03 09:45:45.638: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x17b 
12-03 09:45:45.646: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x234 
12-03 09:45:45.654: E/ming$MessageInputStream(770): bad domain name: possible circular name detected. Bad offset: 0x41 at 0x315 
12-03 09:45:48.295: V/GlassNotification(589): Received notification id: 1 packageName: com.google.glass.settings.ui 
12-03 09:45:48.295: V/GlassNotification(589): skipping since notification not whitelisted 
12-03 09:45:48.342: D/dalvikvm(725): GC_EXPLICIT freed 173K, 4% free 5225K/5440K, paused 2ms+4ms, total 38ms 
12-03 09:45:55.217: V/AlarmManager(506): triggered: flg=0x4 cmp=com.google.glass.logging/.WatchdogService 

Update:

Я заметил, что как только я ошибка RecognizerIntent.ACTION_RECOGNIZE_SPEECH, пару салфетки спады в ряд, наконец, будет обнаружен и я вернусь либо к новому RecognizerIntent.ACTION_RECOGNIZE_SPEECH или он просто оставляет приложение полностью. В ближайшие дни я отправлю дополнительную информацию об этом.

+0

Он отлично работает в моем тестовом приложении. Когда я нажимаю D-pad во время действия, я просто получаю звуковой эффект DISALLOWED. Были ли какие-либо ошибки напечатаны для logcat? – Koh

+0

@ user2954771 Я добавил logcat. – rottenoats

+0

Очень странно. Может быть, вы должны просто переопределить событие крана через GestureDetector? –

ответ

2

Если вы все еще имеете проблему, попробуйте следующее:

На самом верху, объявить личное GestureDetector:

private GestureDetector gestureDetector; 

Затем в методе onCreate(), вызовите метод, который создает GestureDetector (нет никаких причин, чтобы сделать это таким образом более просто создать его в методе onCreate() - это просто выглядит чище, так и более организованными):

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    gestureDetector = createGestureDetector(this); 
} 

createGestureDetector() метод выглядит следующим образом:

private GestureDetector createGestureDetector(Context context) { 
    GestureDetector gestureDetectorTemp = new GestureDetector(context, new GestureDetector.OnGestureListener() { 
         //we are creating our gesture detector here 
     @Override 
     public boolean onDown(MotionEvent motionEvent) { 
      return false; 
     } 

     @Override 
     public void onShowPress(MotionEvent motionEvent) { 
     } 

     @Override 
     public boolean onSingleTapUp(MotionEvent motionEvent) { //onTap 
      return true; //<---this is the key 
     } 
     @Override 
     public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent2, float distanceX, float distanceY) { 
      return false; //this is the wrong kind of scroll 
     } 
     @Override 
     public void onLongPress(MotionEvent motionEvent) { 
     } 

     @Override 
     public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent2, float v, float v2) { 
      return false; 
     } 
    }); 

    return gestureDetectorTemp; 
} 

@Override 
public boolean onGenericMotionEvent(MotionEvent event) { 
    if (gestureDetector != null) { 
     return gestureDetector.onTouchEvent(event); 
    } 
    return false; 
} 

Вы должны убедиться, чтобы включить метод onGenericMotionEvent() в конце там. Именно это гарантирует, что ваш GestureDetector уведомляется каждый раз, когда происходит событие движения.

Дело в том, что я добавил очень минута, но очень важно - путем изменения возвращаемого значения true на методе onSingleTapUp(), вы сообщаете Glass, что событие было обработаны правильно (в данном случае, не только делаем ничего) ,

Вы можете узнать больше о GestureDetector s here.

+0

Пробовал и, к сожалению, не работал. Это логично, так как я пытаюсь применить GestureDetector непосредственно к активности, а не к новому действию (RecognizerIntent.ACTION_RECOGNIZE_SPEECH). Можно ли даже прикрепить обозначенный объект к этой предопределенной деятельности? – rottenoats

+0

@Grimbode Ahhh. Конечно. Боюсь, что нет. Может быть, есть способ, но я этого не знаю. Извини :( –

Смежные вопросы