在我的应用程序中,Activity A使用startActivityForResult发送RecognizerIntent。是否有可能告诉它将结果返回给活动B而不返回活动A?
答案 0 :(得分:0)
PendingIntent
并不意味着将结果传回给调用者,所以就这样了。
如果ActivityB在Backstack中落后于ActivityA,只需执行以下操作:
ActivityA {
@Override
public void onActivityResult (int requestCode, int resultCode, Intent data) {
setResult(resultCode, data);
finish();
}
}
这会将RecognizerIntent
活动传递回ActivityA的任何数据传递给ActivityB。
如果ActivityB是您希望在RecognizerIntent
活动完成时启动的单独活动:
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)
检索的包传递
答案 1 :(得分: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();
}
然后在活动B 中,您可以在onCreate()中获得结果:
Intent intent = getIntent();
if(intent.hasExtra(RecognizerIntent.EXTRA_RESULTS);
ArrayList<String> speechRecResults = intent.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);