안드로이드 코틀린 : Intent 명시적 호출 방법 정리
Lucy Archive
Lucy 2023
2021. 3. 25. 01:16

Android Kotlin : Explicit Intent

Activity 실행과 관련된 Intent 명시적 호출 방법에 대해 정리합니다. 

 

용어 간단 정리

Activity 화면 전환 관련된 용어 정리입니다.

  • Activity
    • 앱의 단일 화면을 나타냄
    • 앱은 하나의 Activity로 구성 될 수도 있고, 여러개의 Activity로 구성 될 수 있음
  • Intent
    • 안드로이드 기본 구성 요소(컴포넌트) 간의 통신을 위해 사용되는 메세지 객체
    • 대표적인 사용 예 : 액티비티 시작, 서비스 시작, 브로드캐스트 전달
※ 안드로이드 4대 구성요소

✔ Activity : 화면에 표시되어 사용자와 상호 작용을 하는 컴포넌트

✔ Service : 백그라운드에서 실행되는 컴포넌트(화면이 없는 Activity). 

✔ Broadcast Receiver : 시스템에서 보내는 메세지를 수신을 하기 위한 컴포넌트

✔ Content Provider : 앱간의 데이터 공유를 위한 컴포넌트

 

Intent와 Activity

Intent를 사용해서 Activity, Service를 실행하는 방법은 명시적 호출 방법과 암시적 호출 방법 두 가지가 있다.

  • 명시적 호출
    • Activity, Service등의 이름을 정확하게 알고 있는 경우
    • 예시 : 같은 앱 내의 Activity 를 실행 할 때
  • 암시적 호출
    • 작업 유형을 명시하고, 그 작업을 수행 할 수 있는 구성 요소를 호출함
    • 예시 : 사진을 찍기 위해 카메라 기능이 있는 앱을 선택하여 실행 할 때

 

명시적 호출

명시적 호출은 실행할 Activity 나 Service 등의 이름을 명확하게 알고 있는 경우 사용합니다.

다른 액티비티 실행

앱에서 다른 액티비티를 실행하기 위한 코드입니다. Intent에 실행하고자 하는(intent:의도) 엑티비티 클래스 이름을 등록 후 액티비티 실행 함수 startActivity()에 실어서 안드로이드에 요청합니다. Intent 생성자의 첫번 째 인자는 Context 입니다.

// SubActivity 이름의 Activity 실행
startActivity(Intent(this, SubActivity::class.java))

// 위와 동일한 코드
val intent = Intent(this, SubActivity::class.java)
startActivity(intent)

Intent 사용하여 Activity 화면 전환

 

안드로이드 코틀린 : Intent를 사용하여 Activity 화면 전환

Android Kotlin : Activity 화면 전환 하기 Activity 앱의 단일 화면을 나타내는 안드로이드 4개 구성 요소 중의 하나입니다. 일반적으로 우리가 사용하는 앱은 하나의 액티비티 또는 다수의 액티비티로

juahnpop.tistory.com

 

엑티비티 실행시 데이터 전달

액티비티를 실행하면서 데이터를 전달하기 위해 Extras() 메서드를 사용할 수 있습니다. 보통 Key, Value 타입의 데이터를 전달하거나, Bundle 객체로 전달할 수 있습니다. startActivity() 함수로 Activity를 실행하면 함수의 인자로 사용된 intent가 실행되는 Activity에 그대로 전달됩니다.

박스에 주소(Activity이름)를 적고 내용물(데이터)를 포함해서 택배 접수하면 수신측에 그 박스의 데이터가 전달 된다고 생각하면 됩니다.

// SubActivity 에 데이터를 첨부하여 실행
val intent = Intent(this, SubActivity::class.java)
	.putExtra("Data", "Hello Intent!")
startActivity(intent)
// SubActivity 가 실행 후 intent에 포함된 데이터 처리
binding.textView.text = intent.getStringExtra("Data")

액티비티 실행 요청을 받은 SubActivity코드에서 사용된 우측항의 intent 객체는 getIntent() 의 리턴값으로 startActivity() 함수의 인자인 intent를 반환합니다. 

Activity 실행시 데이터 넘기기

 

안드로이드 코틀린 : Activity 전환 할 때 데이터 넘기기

Android Kotlin :데이터 포함하여 Activity 전환하기 지난 포스트에서 Intent를 활용하여 Activity를 전환하는 방법을 소개하였습니다. 이번 포스트는 Activity 전환시 데이터를 포함하는 방법 을 소개합니다

juahnpop.tistory.com

 

실행된 액티비티에서 데이터 받기

MainActivity에서 Intent를 사용하여 실행 한 SubActivity로 부터 결과 데이터를 받고 싶은 경우 StartActivity() 함수가 아닌 StartActivityForResult() 함수를 사용합니다. StartActivityForResult() 함수의 두번째 인자는 사용자가 정의한 임의의 식별 번호 입니다. 앱에서 여러가지 Activity 를 실행하는 경우 각 어느 액티비티에서 결과 값이 전송 되었는지 확인 하기 위해 사용됩니다. 

val intent = Intent(this, SubActivity::class.java)
        .putExtra("Data", "Hello Intent!")
startActivityForResult(intent, 100)

위의 코드는 MainActivity에서 결과 값을 받기 위해 SubActivity를 실행하는 코드 입니다. 아래는 SubActivity로 부터 결과값이 있을 때 사용되는 코드 예시입니다. 호출한 Activity로 부터 결과 값을 처리는 onActivityResult() 콜백 함수에서 할 수 있습니다. 

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    if(resultCode == Activity.RESULT_OK){
        when(requestCode){
            100 -> {
                Toast.makeText(this, data?.getStringExtra("returnValue"), Toast.LENGTH_SHORT).show()
            }
        }
    }
}

아래 코드는 SubActivity에서 리턴값을 생성하고 호출한 MainActivity로 결과값을 전달하는 예시입니다. 결과 값 전달은 setResult() 함수를 사용합니다.

val returnIntent = Intent()
    .putExtra("returnValue", "Activity Return Test")
setResult(Activity.RESULT_OK, returnIntent)
finish()

Activity 종료 결과 값 수신

 

안드로이드 코틀린 : 전환된 Activity 종료 결과 수신하기, startActivityForResult() 와 onActivityResult()

Android Kotlin : Activity 종료 결과 데이터 수신하기 지난 포스트에서 Intent를 활용하여 새로운 Activity를 실행 할 때 데이터를 전달하는 방법에 대해 소개하였습니다. 이번 포스트는 새로 생성된 Activit

juahnpop.tistory.com

 

Intent 명시적 호출 정리

포스트의 내용을 정리하면 아래와 같습니다.

  • 호출하는 액티비티에서..
    • 명시적 Intent 생성자 : Intent(Context, 구성요소(Activity,Service)의 Class)
    • Activity 실행 : StartActivity() 함수에 intent 객체를 실어서 안드로이드에 요청
    • Intent 에 데이터 첨부 : putExtra()를 사용해 Key, Value 쌍의 데이터 첨부 가능
    • 결과 값 받기위한 Acitvity 실행 : StartActivityForResult() 함수에 intent 객체와 식별 번호를 인자로 사용
    • 결과 값 수신되는 코드 : onActivityResult() 콜백 함수에서 처리
  • 호출받은 액티비티 에서..
    • 호출하는 액티비티에서 전달된 데이터는 intent 이름의 객체에서 접근 할 수 있음
    • 결과 값 처리하기 위해 setResult() 함수를 사용
관련포스트

🤞 안드로이드 앱 제작 관련글 목록 보기

🤞 안드로이드 Intent 관련글 목록 보기

🤞 안드로이드 Actiity 관련글 목록 보기