尝试通过RecognizerIntent.ACTION_WEB_SEARCH在我的应用程序中使用谷歌的“语音操作”。根据文档,我应该可以通过RecognizerIntent.EXTRA_RESULTS获得语音识别结果。下面代码中的onActivityResult()似乎是在startActivityForResult()之后立即调用的,结果还不确定。有人能帮忙吗?谢谢!

int VOICE_ACTIONS_CODE = 1234 ;
Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH) ;
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM) ;
startActivityForResult(intent, VOICE_ACTIONS_CODE) ;

. . .

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == VOICE_ACTIONS_CODE) {
        if(resultCode == RESULT_OK) {
            ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) ;
            // The following should print speech recog. results
            Log.w("Results from Voice Actions:", result.get(0)) ;
        }
    }
    super.onActivityResult(requestCode, resultCode, data) ;
}

最佳答案

如果结果不RESULT_OK是因为某种原因,目的不顺利。您的应用程序清单中是否有Internet连接和相应的权限?
如果没有,尝试添加它们。
顺便问一下,如果你没有得到RESULT_OK,那么resultCode的值是多少?
@@@@@@@@编辑@@@@@@@@
现在我完全理解你的问题了。
问题如下,您使用actionRecognizerIntent.ACTION_WEB_SEARCH启动intent,当根据reference应该返回结果时,它永远不会返回结果。它调用onActivityResult就在“Speak Now”对话框显示时,它不可能返回语音识别的任何结果。
然而,它触发了相应的动作。但我同意你的看法,这种行为不是文件中描述的那样。
对不起,我只能说这看起来像是api的实现错误。

07-28 04:21
查看更多