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