본문 바로가기

OS/Android

Android Intent

반응형

Intent란?

Intent는 4대 컴포넌트(Activity, Service, BroadCast Receiver, Content Provider) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.

예를 들어 B 엑티비티로 이동을 한다고 했을때 코드는 다음과 같을 것이다.

코드 A.

    companion object
    {
        fun openActivity(context : Context)
        {
            val i = Intent(context, B::class.java)
            act.startActivity(i)
        }
    }

A 코드에서 Intent(자신의 context, 이동할 엑티비티 클래스)로 구성되어 있고 startActivity 메소드를 통해 인텐트를 전달하고 있다.

이 코드를 좀 더 내부적으로 살펴보면

1. startActivity 메소드를 통해 인텐트를 안드로이드 시스템에 전달하게 된다.

2. 안드로이드 시스템은 Intent의 값을 확인하고 B Activity를 실행하게 된다.

https://developer.android.com/guide/components/intents-filters?hl=ko

Intent 종류

일반적으로 Intent는 명시적 인텐트, 암시적 인텐트로 구분할 수 있다.

1. 명시적 인텐트(Explicit Intent)

Explicit는 명백한이라는 뜻이다.

직역하자면 명백한 Intent라고 해석할 수 있다.

무엇이 명백하단 건지 느낌이 안 올 수 있는데 위의 코드에서 Intent(context, B::class.java)처럼 명확하게 대상을 지정하여 사용하는 것을 명시적 인텐트라고 이해하면 될 것이다.

2. 암시적 인텐트(implicit Intent)

implicit는 암시적인이라는 뜻이며 명확하지는 않고 그저 넌지시 알려주는 Intent라고 해석할 수 있다.

무엇을 어떻게 넌지시 알리는지 코드를 보며 확인해보겠다.

코드 B.

val intent = Intent(Intent.ACTION_DIAL)
val DATA_MY_NUMBER = Uri.fromParts("tel", "01012341234", null)
intent.setData(DATA_MY_NUMBER)
startActivity(intent)

B 코드는 A코드와는 다르게 Intent 안에 명확한 클래스를 넣지 않고 ACTION 플래그를 넣었다.

ACTION_DIAL은 데이터에 있는 다이얼넘버로 전화통화 요청하는 액션이다. A코드처럼 하나의 클래스를 지정해서 호출하는 것이 아니라 ACTION_DIAL에 등록되어 있는 어플리케이션을 호출하게 된다. 만약 ACTION_DIAL에 등록되어 있는 앱이 두 개고, 기본으로 설정되어 있는 않으면 다음과 같이 어플리케이션을 선택할 수 있는 팝업창이 뜬다.

 

 

이처럼 암시적 Intent는 명시적 Intent와는 다르게 "난 A 클래스를 호출하거야!"라는 느낌이 아닌 "난 ~~한 행동을 취하고 싶은데 준비된게 있니?"라고 얘기하는 것과 유사한 느낌이다.

반응형

'OS > Android' 카테고리의 다른 글

안드로이드 기존 버전 apk에서 -> 신규 버전 bundle로 업데이트  (0) 2021.04.08
Android 유닛 테스트  (0) 2021.04.06
Android Context  (0) 2021.03.24
Android decompile  (0) 2021.03.10
Android ABI  (0) 2021.03.03