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

How to check STT Result in an Android Fragment

我目前是 运行 一个 activity,有一个 tabhost 和 5 个片段:

Android API LVL19 Android Studio 2.2 使用 Android 4.4

测试设备 Samsung Galaxy Tab 3

在这些片段中的任何一个上,我都有一些 edittext 元素。我为每个 edittext 使用一个按钮来启动 androids Speech-To-Text 提示。

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。问题是,activity 收到了结果。所以我在 MyActivity.onActivityResult(...) 中添加了对 if(reqeustCode == REQUEST_CODE_STT) 的检查并启动 ActiveFragment.onActivityResult(...) 我的问题是 android Speech-To-Text 总是 returns 一些随机请求代码,例如 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);
     }
    }

正如 brandall 所建议的,我研究了 "onActivityResult request code wrong fragment" 的主题。

我发现很多解释都是一样的。

如果您使用 Fragment 中的 onActivityResult(),您的 Activitiy onActivityResult() 会获取片段的请求代码,而不是您在开始的 startActivityForResult() 中输入的代码来自 Fragment

所以只需调用 getActivity().startActivityForResult(intent, requestcode)

看完后我试了一下,效果很好。 android 开发人员指南中没有提到这一点,这真是令人遗憾。