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

RecognizerIntentこれにより、 Activity が ActivityA に戻したデータはすべてActivityB に渡されます。

RecognizerIntentActivityB が、 Activity の完了時に開始する別の 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 を使用すると、A に戻らずに結果をアクティビティ B にプッシュできます。

アクティビティ 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);
于 2014-12-11T21:16:16.417 に答える