如何从另一个类中获取OnActivityResult的结果?(在活动之外

时间:2014-08-28 20:03:14

标签: android

我在非活动类中启动语音识别活动(通过传入活动)这里是代码:

private static void startVoiceRecognitionActivity() {
        // TODO Auto-generated method stub
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                "Talk");
                myActivity.startActivityForResult(intent, REQUEST_CODE);
    }

最后一行myActivity是我传入此类方法的类的活动。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    for (final EditText editText : editTextHandlingList) {
        if (requestCode == REQUEST_CODE && resultCode == theActivity.RESULT_OK) {
            ArrayList<String> results = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                        //log the result            }
    }
}

现在问题是onActivityResult方法。我希望能够将结果返回到同一个类中,而不是在活动中。 如果它含糊不清,请问我问题..

当我将活动传递给这个班级时,有什么方法可以做到这一点吗?应该有办法解决这个问题。 如果您有任何疑问,请问我。

2 个答案:

答案 0 :(得分:0)

I want to be able to get the result back inside the same class and not 
in the activity.

没有办法,你真的无法在不执行你的活动的情况下得到结果,因为当其他活动结束时startActivityForResult与你的活动有关。

<强>溶液

由于您在另一个班级中拥有myActivity,因此您可以使用其中的Intent来获取您班级中启动VoiceRecognition的其他活动的结果。还要确保在VoiceRecognition活动结束后调用它。

<强>样品:

myActivity.getIntent().getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

答案 1 :(得分:0)

如果我理解这个问题,你就是想做这样的事情:

有时创建一个封装自定义代码的实用程序类很有用(在本例中是与语音相关的)。实用程序类只是一堆static方法:

public static class VoiceRecognitionUtils {

    private static void startVoiceRecognitionActivity(Activity myActivity) {
        // TODO Auto-generated method stub
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                "Talk");
                myActivity.startActivityForResult(intent, REQUEST_CODE);
    }

    private static void processResult(int requestCode, int resultCode, Intent data) {
        for (final EditText editText : editTextHandlingList) {
            if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
                ArrayList<String> results = data
                    .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            }
        }
    }
}

鉴于该类,您的活动可以从适当的生命周期事件中调用静态方法:

public class MainActivity extends FragmentActivity {
    // ...

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        VoiceRecognitionUtils.processResult(requestCode, resultCode, data);
    }

    // call startVoiceRecognitionActivity() somewhere

}

语音识别仍在启动,Activity收到的结果(因为Android操作系统要求),但技术细节收集在实用程序类中。

我不确定你的问题是否是你想要做的,但无论如何我会推荐这种技术,它非常有用。