如何在 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 开发人员指南中没有提到这一点,这真是令人遗憾。
我目前是 运行 一个 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 开发人员指南中没有提到这一点,这真是令人遗憾。