我尝试将语音识别为此链接中显示https://software.intel.com/en-us/articles/developing-android-applications-with-voice-recognition-features。
它使用run()方法在背景上创建线程,我从片段中调用它,如SpeechRecognitionHelper.run(getActivity());
然后在显示它使用
ownerActivity.startActivityForResult(intent,SystemData.VOICE_RECOGNITION_REQUEST_CODE);
其中ownerActivity是getActivity()我在run()上传递它。
所以我想我可以在Fragment中实现onActivityResult(..)
(它调用run()并动态获取结果。
但是在尝试时却给我一个错误。
startActivityForResult
?答案 0 :(得分:0)
for(size_t i = 0; i < innerMapit->second.size(); ++i)
{
if(innerMapit->second[i] != keyIt->second[i]) //Do they match?
{
match = false;
break;
}
}
是您从识别器活动中获取语音识别结果的唯一方法。
如果从onActivityResult()
调用它,则必须覆盖同一个Activity子类上的Activity.startActivityForResult()
才能获得结果。
如果从Activity.onActivityResult()
调用它,则必须覆盖同一Fragment子类上的Fragment.startActivityForResult()
以获得结果。
答案 1 :(得分:0)
Can't I get the result in the Fragment if I specify it even I use it in anther class?
从您分享的startRecognitionActivity
方法链接预期Activity
并使用Activity
上下文启动Voice Recognition Activity
,结果将传递给活动。修改方法以从Activity
上下文启动Fragment
。
private static void startRecognitionActivity(Fragment callerFragment) {
// create an Intent with “RecognizerIntent.ACTION_RECOGNIZE_SPEECH” action
// start Activity and wait for result on fragment
callerFragment.startActivityForResult(intent, SystemData.VOICE_RECOGNITION_REQUEST_CODE);
}
现在覆盖onActivityResult
类
Fragment
// Fragment Results handler
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// handle the result
if (requestCode == SystemData.VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
// Do your stuff here
}
}