如何检查Android片段中的STT结果

时间:2016-09-21 10:32:51

标签: android speech-to-text onactivityresult

我目前正在运行一个带有tabhost和5个片段的活动:

Layout

Android API LVL19 Android Studio 2.2 使用Android 4.4测试设备Samsung Galaxy Tab 3

在任何这些片段上我都有一些edittext元素。我按照每个edittext使用一个按钮来启动android语音到文本提示。

private void promptSTT() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            getString(R.string.speech_prompt));
    startActivityForResult(intent, REQUEST_CODE_STT);
}

其中private static final int REQUEST_CODE_STT = 250。问题是,结果是由活动收到的。所以我在MyActivity.onActivityResult(...)中添加了对if(reqeustCode == REQUEST_CODE_STT)的检查并启动ActiveFragment.onActivityResult(...)我的问题是android语音到文本总是返回一些随机请求代码,如2555677或1233789等。所以我无法检测结果是否实际来自我的片段调用。有人能告诉我为什么会出现这些随机代码而不是我在通话中输入的代码吗?

onActivityResult只检查以下内容:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
   {
     super.onActivityResult(requestCode, resultCode, data);
     if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_STT && data != null) {
       Fragment fragment = getSupportFragmentManager().getFragments()
                           .get(tabHost.getCurrentTab());
       fragment.onActivityResult(requestCode, resultCode, data);
     }
    }

1 个答案:

答案 0 :(得分:0)

正如brandall建议的那样,我查看了“onActivityResult请求代码错误片段”的主题。

我发现很多解释总是说同样的。

如果您使用来自Fragment的{​​{1}}来自Activitiy onActivityResult()的onActivityResult()获取片段的请求代码,而不是您放入startActivityForResult()的代码Fragment

所以只需致电getActivity().startActivityForResult(intent, requestcode)即可。

阅读之后,我尝试了它并且完美地工作。很遗憾在android开发者指南中没有提到这一点。