slide-image

Intent

Intent는 액티비티를 띄울 목적으로 사용되며 액티비티 간의 데이터를 전달할 때도 사용한다.

예를 들면, 인텐트를 만든 후 startActivity나 startActivityForResult를 사용해 다른 액티비티로 전달한다.

val intent = Intent(this@MainActivity, MenuActivity::class.java)
startActivityForResult(intent, 101)

 

인텐트의 역할과 사용 방식 

android.content 패키지 안에 정의되어 있는 인텐트는 앱 구성 요소 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.

[대표적인 메서드]

startActivity() 또는 startActivityForResult()

startService() 또는 bindService()

boradcastIntent()

인텐트의 기본구성 요소는 '액션'과 '데이터'이며, 액션은 수행할 기능을 나타내고 데이터는 액션을 수행할 대상의 데이터이다.

 

예를 들어, 인텐츠 객체에 ACTION_VIEW와 url을 전달하면 단말에 설치되어있는 웹브라우저의 화면이 뜨면서 이를 보여준다. 인텐트의 데이터는 그 포맷이 어떤 것인가 시스템이 확인 후 적절한 액티비티를 찾아 띄워주기도 한다.
ex) http처럼 특정 포맷을 사용하면 등록된 MIME타입으로 구분한다. (http://로 시작하는 문자열이 웹페이지 주소를 나타내는 URL이라고 인식하는 것과 같음) 

인텐트 전달 메커니즘은 이와 같이 MIME 타입을 구분한 후 설치된 앱들 중에 적절한 것을 찾아 액티비티를 띄워주는 것이다.

 

인텐트의 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우를 '명시적 인텐트', 액션과 데이터를 지정하긴 했지만 호출할 대상이 달라질 수 있는 경우를 '암시적 인텐트'라고 한다.

암시적 인텐트는 MIME타입에 따라 시스템에서 적절한 다른 앱의 액티비티를 찾은 후 띄우는 방식이다. 즉, 설치된 앱 정보를 알고있는 시스템이 인텐트를 이용해 요청한 정보를 처리할 수 있는 적절한 컴포넌트를 찾아본 다음 사용자에게 보여준다. 여기에서 컴포넌트는 액티비티와 같은 독립적인 구성요소이다.

 

암시적 인텐트는 액션과 데이터로 구성되지만 그 외에도 이와 같은 속성을 가지고 있다.

     
  • 범주 : 액션이 실행되는데 필요한 추가적인 정보를 제공
    ex) CATEGORY_LAUNCHER는 최상위 앱으로 설치된 앱들의 목록을 보여주는 애플리케이션 런처화면에 이 앱을 보여주어야 한다는 것을 의미한다.
  • 타입 : 인텐트에 들어가는 데이터의 MIME 타입을 명시적으로 지정
  • 컴포넌트 : 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정. 이 속성이 지정될 경우는 지정된 컴포넌트가 실행되도록 한다. 새로운 액티비티를 정의하고 그 액티비티의 클래스 객체를 전달하여 실행하는 방법도 컴포넌트를 지정하는 방식과 같다.
  • 부가데이터 : 추가정보를 넣을 수 있도록 하는 번들 객체.

컴포넌트 사용 예시(사용될 클래스 지정)

var intent = Intent()
var name = ComponentName("org.techtown.sampleCallIntent", "org.techtown.sampleCallIntent.MenuActivity")
intent.setComponent(name)
startActivityForResult(intent, "101")

 

============================================================================

[Intent 클래스에 정의된 다양한 액션 정보]

     
  • ACTION_MAIN
  • ACTION_ATTACH_DATA
  • ACTION_EDIT
  • ACTION_PICK
  • ACTION_CHOOSER
  • ACTION_GET_CONTENT
  • ACTION_DIAL
  • ACTION_CALL
  • ACTION_SEND
  • ACTION_SENDTO
  • ACTION_VIEW
  • ACTION_ANSWER
  • ACTION_INSERT
  • ACTION_DELETE
  • ACTION_RUN
  • ACTION_SYNC
  • ACTION_PICK_ACTIVITY
  • ACTION_SEARCH
  • ACTION_ACTION_WEB_SEARCH
  • ACTION_FACTORY_TEST