인텐트는 4대 컴포넌트 중 하나로 메시징 객체입니다.
인텐트의 기본 개념
인텐트는 실행을 위해 안드로이드 시스템에 정보를 넘기는 행동입니다.

1. Activity A가 작업 설명이 들어있는 Intent를 생성하여 startActivity() 에 전달한다.
2. Android System 이 모든 앱에서 모든 앱에서 해당 인텐트와 일치하는 인텐트 필터를 검색한다.
3. System이 Activity B의 onCreate() 메서드를 호출하여 이를 Intent에 전달하고 일치한 Activity B를 시작한다.
이해를 위한 Intent 사용 사례
- Activity의 새로운 인스턴스를 시작하려면 Intent를 startActivity() 로 전달하면 된다.
- 파일 다운로드와 같은 일회성 작업을 시작하려면 Intent를 startService() 로 전달하면 된다.
- Intent를 sendBroadcast() 또는 sendOrderedBroadcast() 에 전달하면 다른 앱에 브로드캐스트 메세지를 전달할 수 있다.
인텐트의 유형
인텐트의 유형에는 명시적 인텐트와 암시적 인텐트, 두 가지로 나눌 수 있다.
명시적 인텐트는 실행하고자하는 클래스의 이름을 인텐트에 담는 방법입니다.
암시적 인텐트는 Intent Filter 정보를 활용하는 방법으로 주로 클래스 이름을 알 수 없는 외부 앱의 컴포넌트를 실행할 때 이용한다.
명시적 인텐트
- 명시적 인텐트는 클래스나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우에 사용한다.
- 주로 사용되는 곳은 애플리케이션 내부이다.
- 특정 컴포넌트나 액티비티가 명확하게 실행되어야할 경우에 사용된다.
암시적 인텐트
- 호출할 대상이 달라질 수 있는 경우에 사용한다.
- 설치된 애플리케이션들에 대한 정보를 알고 있는 안드로이드 시스템이 인텐트를 사용해 요청을 처리할 수 있는 적절한 컴포넌트를 찾고, 사용자에게 처리 결과를 알려준다.
- 이미 깔려있는 어플을 보여준다던지 앱에서 다른 앱을 실행시키고자 한다면 암시적 인텐트를 사용한다.
인텐트 필터
Android Manifest에는 intent-filter 태그가 있다.
인텐트 필터 안에는 3가지의 태그가 있는데 목록은 다음과 같다.
-
Action: 컴포넌트가 어떤 작업을 갖추고 있는지에 대한 문자열으로 임의로 지정한 단어와 라이브러리에서 지정한 문자열을 이용할 수 있다.
- ACTION_VIEW: 액티비티가 사용자에게 표시할 수 있는 정보를 가지고 있을 때, startActivity()가 있는 인텐트에서 사용한다( 갤러리 앱의 사진, 지도 앱의 주소 )
- ACTION_SEND: 공유 인텐트라고도 하며, 사용자가 다른 앱을 통해 공유할 수 있는 데이터를 가지고 있을 때 startActivity()가 있는 인텐트에서 사용한다( 이메일 앱, 소셜 공유 앱 )
-
Category: 컴포넌트에 대한 추가 정보로 어느 컴포넌트인지 표현하는 데 사용한다( startActivity() 나 startActivityForResult() 메서드로 암시적 인텐트를 실행하면 CATEGORY_DEFAULT 가 선언된 것처럼 행동한다 )
-
Data: 컴포넌트를 실행하기 위해 필요한 데이터에 대한 상세 정보를 명시하기 위해 사용한다( data는 URL 형식으로 표현하여 android:scheme, android:host, android:port , android:mimeType 등으로 선언 )
추가 속성 android:exported
- 인텐트를 통해서 다른 앱에도 데이터를 전송할 수 있던것처럼 android:exported 를 사용하여 해당 액티비는 다른 앱에 의해서 실행될 수 있는지 없는지 추가적으로 설정할 수 있다.
- 액티비티, 서비스, 브로드캐스트에서 인텐트 필터를 사용하고 exported 속성을 명시적으로 지정하지 않는다면 API 12 이상 버전에서는 스마트폰에 앱이 설치되지 않는 이슈가 있다.