Android Kotlin : Explicit Intent
용어 간단 정리
Activity 화면 전환 관련된 용어 정리입니다.
- Activity
- 앱의 단일 화면을 나타냄
- 앱은 하나의 Activity로 구성 될 수도 있고, 여러개의 Activity로 구성 될 수 있음
- Intent
- 안드로이드 기본 구성 요소(컴포넌트) 간의 통신을 위해 사용되는 메세지 객체
- 대표적인 사용 예 : 액티비티 시작, 서비스 시작, 브로드캐스트 전달
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)
엑티비티 실행시 데이터 전달
액티비티를 실행하면서 데이터를 전달하기 위해 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를 반환합니다.
실행된 액티비티에서 데이터 받기
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()
Intent 명시적 호출 정리
포스트의 내용을 정리하면 아래와 같습니다.
- 호출하는 액티비티에서..
- 명시적 Intent 생성자 :
Intent(Context, 구성요소(Activity,Service)의 Class) - Activity 실행 :
StartActivity()함수에 intent 객체를 실어서 안드로이드에 요청 - Intent 에 데이터 첨부 :
putExtra()를 사용해 Key, Value 쌍의 데이터 첨부 가능 - 결과 값 받기위한 Acitvity 실행 :
StartActivityForResult()함수에 intent 객체와 식별 번호를 인자로 사용 - 결과 값 수신되는 코드 :
onActivityResult()콜백 함수에서 처리
- 명시적 Intent 생성자 :
- 호출받은 액티비티 에서..
- 호출하는 액티비티에서 전달된 데이터는 intent 이름의 객체에서 접근 할 수 있음
- 결과 값 처리하기 위해
setResult()함수를 사용
'Programming > Android App(Kotlin)' 카테고리의 다른 글
안드로이드 코틀린 : Activity에서 Fragment에 데이터 보내기 (0) | 2021.03.25 |
---|---|
안드로이드 코틀린 : Fragment 추가, 변경, 삭제 사용법 및 유의점 (1) | 2021.03.25 |
안드로이드 코틀린 : 앱 디렉토리 폴더 생성, 탐색, 삭제 (0) | 2021.03.24 |
안드로이드 코틀린 : AlertDialog 기본, 목록, 라디오 버튼, 체크 박스, EditText 입력 창 (0) | 2021.03.23 |
안드로이드 코틀린 : 토스트(Toast) 팝업 메세지 사용법 및 전역 함수로 사용법 (2) | 2021.03.19 |