Android

안드로이드 스튜디오 인텐트(Intent) : 두 액티비티 간 데이터 전달하기

567Rabbit 2024. 6. 7. 12:43

https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko

 

활동 수명 주기  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

 

 

 

인텐트(Intent)의 용도

1.  액티비티(Activity) 시작: 한 액티비티에서 다른 액티비티를 시작할 때 사용

 

2. 서비스(Service) 시작: 백그라운드에서 작업을 수행하는 서비스 컴포넌트를 시작할 때 사용

 

3. 브로드캐스트 수신(BroadcastReceiver): 시스템 또는 다른 앱에서 발생하는 브로드캐스트 메시지를 수신할 때 사용

 

 

 

 

 

package com.yujinoh.lifecycle;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;


public class MainActivity extends AppCompatActivity {

    // 멤버변수
    Button button;
    TextView textView;
    EditText editName;
    EditText editAge;
    TextView txtAge;

    // **중요** 내가 실행한 액티비티로부터 다시 데이터를 받아오고 싶을 때 멤버변수, 객체 생성
    ActivityResultLauncher<Intent> launcher =
            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                    new ActivityResultCallback<ActivityResult>() {
                        @Override
                        public void onActivityResult(ActivityResult o) {
                            Log.i("LIFE MAIN", "onActivityResult 실행");
                            //내가 실행한 액티비티로부터, 데이터를 받아오는 부분 코드
                            if (o.getResultCode() == 1000){
                                Log.i("LIFE MAIN", "second Activity로부터 데이터 받는 부분");
                                int age = o.getData().getIntExtra("age", 0);
                                txtAge.setText("10년 후 나이는 " + age + "살");
                            }
                        }
                    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("LIFE MAIN", "onCreate 실행");

        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        editName = findViewById(R.id.editName);
        editAge = findViewById(R.id.editAge);
        txtAge = findViewById(R.id.txtAge);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String name = editName.getText().toString().trim();
                String strAge = editAge.getText().toString().trim();

                int IntAge = Integer.parseInt(strAge);

                // 다른 액티비티를 실행시키는 코드
                // 인텐트를 만든다
                // 인텐트란 어떤 액티비티가 어떤 액티비티를 띄우겠다라는 의도
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

                //액티비티에 데이터를 전달하는 방법
                intent.putExtra("name", name);
                intent.putExtra("age", IntAge);

                // startActivity(intent);

                launcher.launch(intent);
            }
        });
    }


    @Override
    protected void onStart() {
        super.onStart();
        Log.i("LIFE MAIN", "onStart 실행");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("LIFE MAIN", "onResume 실행");

    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("LIFE MAIN", "onPause 실행");

        textView.setText("Hello~~~");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("LIFE MAIN", "onStop 실행");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("LIFE MAIN", "onDestroy 실행");
    }
}

 

 

 

 

 

 

package com.yujinoh.lifecycle;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import androidx.activity.OnBackPressedCallback;


public class SecondActivity extends AppCompatActivity {

    TextView txtName;
    TextView txtAge;

    int age;

    @SuppressLint("MissingInflatedId")

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Log.i("LIFE MAIN", "두번째 액티비티 onCreate 실행");

        // 데이터가 넘어온게 있으면, 데이터를 받아준다.
        String name = getIntent().getStringExtra("name");
        age = getIntent().getIntExtra("age", 0);

        age = age + 10;

        txtName = findViewById(R.id.txtName);
        txtAge = findViewById(R.id.txtAge);

        txtName.setText("이름은 " + name);
        txtAge.setText("10년 후 나이는 " + age + "세");


        // 백(back) 버튼 눌렀을 때 동작하는 코드 작성
        getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                // 메인액티비티에 데이터 전달하기
                Intent intent = new Intent();
                intent.putExtra("age" , age);
                setResult(1000, intent);
                finish();
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i("LIFE MAIN", "두번째 액티비티 onStart 실행");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("LIFE MAIN", "두번째 액티비티 onResume 실행");

    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("LIFE MAIN", "두번째 액티비티 onPause 실행");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("LIFE MAIN", "두번째 액티비티 onStop 실행");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("LIFE MAIN", "두번째 액티비티 onDestroy 실행");

    }

}