0

在我的应用程序中,Activity A 使用 startActivityForResult 发送 RecognizerIntent。是否可以告诉它在不返回活动 A 的情况下将结果返回给活动 B?

4

2 回答 2

0

PendingIntents 并不意味着将结果传回给调用者,所以就这样了。

如果 ActivityB 在后台堆栈中位于 ActivityA 之后,只需执行以下操作:

ActivityA {
    @Override
    public void onActivityResult (int requestCode, int resultCode, Intent data) {
        setResult(resultCode, data);
        finish();
    }
}

这会将RecognizerIntentActivity 传递回 ActivityA 的任何数据传递给 ActivityB。

如果 ActivityB 是您要在RecognizerIntentActivity 完成时启动的单独 Activity:

ActivityA {
    @Override
    public void onActivityResult (int requestCode, int resultCode, Intent data) {
        Intent intent = new Intent(this, ActivityB.class);
        intent.putExtras(data);
        startActivity(intent);
    }
}

这将从 ActivityA 启动 ActivityB,将数据作为可以通过以下方式检索的包传递getIntent().get___Extra(String key)

于 2014-12-11T20:28:40.190 回答
0

使用 PendingIntent 您可以将结果推送到活动 B 而无需返回到 A:

在活动 A 中:

Intent activityIntent = new Intent(this, ActivityB.class);
PendingIntent resPendingIntent = PendingIntent.getActivity(this, 0, activityIntent, 0);

Intent speechRecIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
speechRecIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
speechRecIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
speechRecIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, resPendingIntent);


PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, speechRecIntent, 0);
    try {
    pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
}

然后在 Activity B中,你会在它的 onCreate() 中得到结果:

Intent intent = getIntent();
if(intent.hasExtra(RecognizerIntent.EXTRA_RESULTS);
ArrayList<String> speechRecResults = intent.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
于 2014-12-11T21:16:16.417 回答