1. ホーム
  2. android

[解決済み] AndroidでstartActivityForResultを管理する方法

2022-03-18 13:12:15

質問

私のアクティビティでは、メインアクティビティから次のアクティビティを startActivityForResult . 私の2番目のアクティビティでは、このアクティビティを終了するいくつかのメソッドがあります(多分結果なし)、しかし、それらのうちの1つだけが結果を返します。

例えば、メインのアクティビティから、2つ目のアクティビティを呼び出すとします。このアクティビティでは、カメラが付いているかどうかなど、携帯電話の機能をチェックしています。カメラがない場合は、このアクティビティを終了します。また MediaRecorder または MediaPlayer 問題が発生した場合は、このアクティビティを終了します。

もしそのデバイスにカメラがあり、録画が完全に行われるなら、ビデオを録画した後、ユーザーが完了ボタンをクリックしたら、その結果(録画したビデオのアドレス)をメインアクティビティに送り返します。

メインアクティビティからの結果を確認するにはどうすればよいですか?

どのように解決するのですか?

あなたの FirstActivity を呼び出します。 SecondActivity を使用して startActivityForResult() メソッドを使用します。

例えば

int LAUNCH_SECOND_ACTIVITY = 1
Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, LAUNCH_SECOND_ACTIVITY);

あなたの SecondActivity に、戻したいデータを設定します。 FirstActivity . 戻りたくない場合は、何も設定しないでください。

例えば で SecondActivity データを送り返す場合

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

データを返したくない場合。

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

ここで、あなたの FirstActivity クラスで、以下のコードを onActivityResult() メソッドを使用します。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == LAUNCH_SECOND_ACTIVITY) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            // Write your code if there's no result
        }
    }
} //onActivityResult

2つのアクティビティ間のデータの受け渡しをKotlinでより良い方法で実装するには、次のようにします。 ' アクティビティ間でデータを渡すためのより良い方法 ' .