Android 如何使RecognizerIntent启动if启动的不同活动?

Android 如何使RecognizerIntent启动if启动的不同活动?,android,android-intent,recognizer-intent,Android,Android Intent,Recognizer Intent,在我的应用程序活动中,A使用startActivityForResult发送识别器意图。是否可以告诉它将结果返回给活动B而不通过活动A返回?pendingents并不意味着将结果返回给调用者,因此该操作已结束 如果ActivityB在后台的ActivityA后面,只需执行以下操作: ActivityA { @Override public void onActivityResult (int requestCode, int resultCode, Intent data) {

在我的应用程序活动中,A使用startActivityForResult发送识别器意图。是否可以告诉它将结果返回给活动B而不通过活动A返回?

pendingent
s并不意味着将结果返回给调用者,因此该操作已结束

如果ActivityB在后台的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()检索的捆绑包传递。获取额外(字符串键)

使用挂起的内容,您可以将结果推送到ActivityB,而无需返回:

在活动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_结果);
ArrayList SpeechResults=intent.getStringArrayList(RecognizerIntent.EXTRA_结果);

我在玩一个PedingContent,但无法让它工作。感谢您抽出时间,但您的回答正是我在问“不返回活动a”时想到的(和工作代码)我是否在未将其视为startActivity或startActivityForResult的情况下启动它?您不必这样做。您可以通过调用PendingEvent#send来调用speech rec.activity。我已经编辑了我的答案。将上述模式应用于我的代码会导致应用程序崩溃,出现“com.google.android.wearable.gmsclient.WearableException:sendRpcAsync failed:Status{statusCode=未知状态代码:4000,resolusion=null}异常。
Intent intent = getIntent();
if(intent.hasExtra(RecognizerIntent.EXTRA_RESULTS);
ArrayList<String> speechRecResults = intent.getStringArrayList(RecognizerIntent.EXTRA_RESULTS);