Android 使用语音识别的部分结果

Android 使用语音识别的部分结果,android,speech-recognition,android-2.3-gingerbread,Android,Speech Recognition,Android 2.3 Gingerbread,我创建了一个简单的应用程序,以测试所有可用选项(即extra)。我阅读了有关的内容,如果启用此选项,我将从服务器接收与语音识别相关的任何部分结果。但是,当我在ACTION\u RECOGNIZE\u SPEECH意图中添加此额外内容时,语音识别不再起作用:列表不会显示任何结果 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == VOICE_RE

我创建了一个简单的应用程序,以测试所有可用选项(即extra)。我阅读了有关的内容,如果启用此选项,我将从服务器接收与语音识别相关的任何部分结果。但是,当我在
ACTION\u RECOGNIZE\u SPEECH
意图中添加此额外内容时,语音识别不再起作用:列表不会显示任何结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) {
        switch(resultCode) {
        case RESULT_OK:
            Log.i(TAG, "RESULT_OK");
            processResults(data);
            break;
        case RESULT_CANCELED:
            Log.i(TAG, "RESULT_CANCELED");
            break;
        case RecognizerIntent.RESULT_AUDIO_ERROR:
            Log.i(TAG, "RESULT_AUDIO_ERROR");
            break;
        case RecognizerIntent.RESULT_CLIENT_ERROR:
            Log.i(TAG, "RESULT_CLIENT_ERROR");
            break;
        case RecognizerIntent.RESULT_NETWORK_ERROR:
            Log.i(TAG, "RESULT_NETWORK_ERROR");
            break;
        case RecognizerIntent.RESULT_NO_MATCH:
            Log.i(TAG, "RESULT_NO_MATCH");
            break;
        case RecognizerIntent.RESULT_SERVER_ERROR:
            Log.i(TAG, "RESULT_SERVER_ERROR");
            break;
        default:
            Log.i(TAG, "RESULT_UNKNOWN");
            break;
        }
    }
    Log.i(TAG, "Intent data: " + data);
    super.onActivityResult(requestCode, resultCode, data);
}

private void processResults(Intent data) {
    Log.i(TAG, "processResults()");

    ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

    // list of results
    ListView listOfResults = (ListView)(findViewById(R.id.list_of_results));
    listOfResults.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));

    // number of elements of above list
    TextView resultsCount = (TextView)(findViewById(R.id.results_count));
    resultsCount.setText(getString(R.string.results_count_label) + ": " + matches.size());
}

但是,启用此选项后,
processResults
方法中的
ArrayList匹配
只有一个空元素。

我建议不要依赖部分搜索结果,因为谷歌文档说明:

根据我的经验,谷歌几乎总是忽略部分搜索结果的请求

但是,我不认为设置
EXTRA\u PARTIAL\u RESULTS
会阻止正常
EXTRA\u RESULTS
返回。它应该没有任何效果。我已经在代码中对此进行了测试,添加
EXTRA\u PARTIAL\u结果
不会改变输出

另外,除非您使用的是
SpeechRecognizer
,否则Android不会向您发送这些错误代码

查看
额外部分结果
不会干扰结果。从中获取代码,然后在此方法中添加额外代码:

private void sendRecognizeIntent()
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say the magic word");
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 100);
    startActivityForResult(intent, SPEECH_REQUEST_CODE);
}

我想了解为什么我在Android 2.3.5上的测试(带有
EXTRA\u PARTIAL\u结果
选项)不起作用。您使用了哪些说明来请求部分结果?(我只是在原意中添加了这个额外的内容:请参阅我在问题末尾添加的详细信息)。您使用了哪些说明来访问部分结果?应该有完整的结果一起返回。。。是否?从这里获取代码:然后添加intent.putExtra(RecognizerIntent.EXTRA\u PARTIAL\u RESULTS,true);注意:我在Android 4.0.3Soon上进行了测试,我将从您的链接中尝试代码!如果同样的问题会发生,是什么原因造成的?Android的2.3.5版本或语音识别器的版本(我有语音搜索2.1.3)?我刚刚在安装了语音搜索2.1.3的Android 2.3.5上尝试了您的链接中的代码:当我添加
intent.putExtra(RecognizerIntent.EXTRA\u PARTIAL\u RESULTS,true),结果列表始终为空。我想这个问题是由语音搜索应用程序引起的:我可以尝试用最新版本更新它!有趣的怪虫子。顺便说一句,它在Droid X上工作,Android版本为2.3.3,语音搜索2.1.4额外部分结果的内部是什么?一个常量字符串值(
“Android.speech.EXTRA.PARTIAL\u RESULTS”
),可用于启用或禁用“pratial RESULTS”选项,因此我将其设置为布尔值
true
private void sendRecognizeIntent()
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say the magic word");
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 100);
    startActivityForResult(intent, SPEECH_REQUEST_CODE);
}