2015-09-24 44 views
0

我嘗試使語音識別爲顯示在此鏈接https://software.intel.com/en-us/articles/developing-android-applications-with-voice-recognition-featuresGet onActivityResult不在同一個類上發送startActivityForResult

它使用一個run()方法,使其線程在後臺,我把它從這樣的片段SpeechRecognitionHelper.run(getActivity()); 然後在顯示它使用

ownerActivity.startActivityForResult(intent,SystemData.VOICE_RECOGNITION_REQUEST_CODE); 

其中ownerActivity是getActivity()我將它傳遞給run()。 所以我想我可以實現在片段onActivityResult(..)(其中調用run(),並得到結果的飛行。 但它顯示了我的錯誤嘗試,所以當。

  1. 我不能如果我使用run()方法得到結果,如果我指定它,即使我用它在另一個類中?
  2. 如果不是我如何使用run()方法得到結果?如果我還必須使用startActivityForResult

回答

0

onActivityResult()是您獲得語音識別結果的唯一方法來自識別器的活動。

如果從Activity.startActivityForResult()調用它,則必須在同一個Activity子類上覆蓋Activity.onActivityResult()以獲得結果。

如果從Fragment.startActivityForResult()調用它,則必須覆蓋該同一Fragment子類上的Fragment.onActivityResult()以獲得結果。

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,這樣的結果將被傳遞到活動中。修改該方法以從Fragment上下文開始Activity

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); 

}

現在覆蓋onActivityResultFragment

// 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 
    } 
} 
+0

所以你的意思寫的所有公共類SpeechRecognitionHelper在我的片段一個內部類?因爲他們如何編寫它,看起來它是使用它自己的一個類,其中private static void startRecognitionActivity是它的一部分? –

相關問題