直接使用SpeechRecognizer API - onResults()保持返回null

srf*_*srf 6 android speech-recognition voice-recognition

我一直试图按照这篇文章中的例子.

由于我没有尝试在服务中实现这一点,而是在标准活动中实现,因此我没有遇到上述帖子中描述的问题.

然而,当getStringArrayList(RecognizerIntent.EXTRA_RESULTS)返回null 时,我不断得到"没有语音结果" - 正如在该帖子中实现的那样.

很显然,我的思念中需要做什么成才,除了

recognizer.setRecognitionListener(listener);
recognizer.startListening(intent);    
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

是否有可能除了startListening()之外我还需要startActivityForResult()?如果是这样,我已经尝试了这个,但它调用了完整的谷歌语音搜索活动(这是我试图避免的,就像@ vladimir.vivien在这里写的那样).由于2个识别器同时运行,这会产生更多问题......

起初我认为缺少的是实际提交给Google的服务器,但是当我从语音识别会话开始直到结束时检查LogCat输出(见下文)时,我看到它实际上创建了一个带有http:/的TCP会话/www.google.com/m/voice-search.

所以显而易见的问题是我错过了什么?

04-18 07:02:17.770: INFO/RecognitionController(623): startRecognition(#Intent;action=android.speech.action.RECOGNIZE_SPEECH;S.android.speech.extra.LANGUAGE_MODEL=free_form;S.android.speech.extra.PROMPT=LEARNSR;S.calling_package=com.example.learnsr.SrActivity;end)
04-18 07:02:17.770: INFO/RecognitionController(623): State change: STARTING -> STARTING
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): AudioHardware PCM record is going to standby.
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:17.780: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:17.780: INFO/AudioHardwareQSD(121): AudioHardware PCM record is going to standby.
04-18 07:02:17.780: INFO/AudioService(164):  AudioFocus  requestAudioFocus() from android.media.AudioManager@46036948
04-18 07:02:17.780: DEBUG/AudioFlinger(121): setParameters(): io 3, keyvalue routing=262144;vr_mode=1, tid 155, calling tid 121
04-18 07:02:17.790: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.790: INFO/AudioHardwareQSD(121): do input routing device 40000
04-18 07:02:17.790: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:17.790: INFO/RecognitionController(623): State change: STARTING -> RECOGNIZING
04-18 07:02:17.790: INFO/ServerConnectorImpl(623): Starting TCP session, url=http://www.google.com/m/voice-search
04-18 07:02:17.930: DEBUG/ServerConnectorImpl(623): Created session a7918495c042db1746d3e09514baf621
04-18 07:02:17.930: INFO/ServerConnectorImpl(623): Creating TCP connection to 74.125.115.126:19294
04-18 07:02:17.980: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:17.980: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:18.070: INFO/ServerConnectorImpl(623): startRecognize RecognitionParameters{session=a7918495c042db1746d3e09514baf621,request=1}
04-18 07:02:18.390: INFO/RecognitionController(623): onReadyForSpeech, noise level:10.29969, snr:-0.42756215
04-18 07:02:19.760: DEBUG/dalvikvm(659): GC_EXPLICIT freed 5907 objects / 353648 bytes in 67ms
04-18 07:02:21.030: INFO/AudioHardwareQSD(121): AudioHardware pcm playback is going to standby.
04-18 07:02:24.090: INFO/RecognitionController(623): onBeginningOfSpeech
04-18 07:02:24.760: DEBUG/dalvikvm(669): GC_EXPLICIT freed 1141 objects / 74296 bytes in 48ms
04-18 07:02:25.080: INFO/RecognitionController(623): onEndOfSpeech
04-18 07:02:25.080: INFO/AudioService(164):  AudioFocus  abandonAudioFocus() from android.media.AudioManager@46036948
04-18 07:02:25.140: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:25.200: INFO/RecognitionController(623): State change: RECOGNIZING -> RECOGNIZED
04-18 07:02:25.200: INFO/RecognitionController(623): Final state: RECOGNIZED
04-18 07:02:25.260: INFO/ServerConnectorImpl(623): ClientReport{session_id=a7918495c042db1746d3e09514baf621,request_id=1,application_id=intent-speech-api,client_perceived_request_status=0,request_ack_latency_ms=118,total_latency_ms=7122,user_perceived_latency_ms=116,network_type=1,endpoint_trigger_type=3,}
04-18 07:02:25.260: INFO/AudioService(164):  AudioFocus  abandonAudioFocus() from android.media.AudioManager@46036948
04-18 07:02:25.270: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:25.270: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:25.270: INFO/RecognitionController(623): State change: RECOGNIZED -> PAUSED
04-18 07:02:25.270: INFO/AudioService(164):  AudioFocus  abandonAudioFocus() from android.media.AudioManager@46036948
04-18 07:02:25.270: INFO/ClientReportSender(623): Sending 1 client reports over HTTP
04-18 07:02:25.280: INFO/AudioHardwareQSD(121): AudioHardware PCM record is going to standby.
04-18 07:02:25.280: DEBUG/AudioFlinger(121): setParameters(): io 3, keyvalue routing=0, tid 155, calling tid 121
04-18 07:02:25.280: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:25.280: INFO/AudioHardwareQSD(121): Routing audio to Speakerphone
04-18 07:02:25.280: DEBUG/AudioHardwareQSD(121): Switching audio device to 
04-18 07:02:25.280: DEBUG/AudioHardwareQSD(121): Speakerphone
04-18 07:02:25.280: INFO/AudioHardwareQSD(121): AudioHardware PCM record is going to standby.
Run Code Online (Sandbox Code Playgroud)

Ste*_*han 2

根据侦听器的文档,您需要使用 SpeechRecognizer.RESULTS_RECOGNITION 从提供给 onResults() 的包中请求结果。你尝试过吗?

使用 RECOGNIZE_SPEECH 意图时将使用 RecognizerIntent.EXTRA_RESULTS。