Intent
메시징 객체
다른 앱 구성 요소로부터 작업을 요청할 때 사용
사용처
1. 액티비티 시작
2. 서비스 시작
3. 브로드캐스트 전달
유형 1. 명시적 인텐트
- 애플리케이션을 명시적으로 지정
- 일반적으로 앱 안에서 구성 요소를 시작할 때 사용
유형 2. 암시적 인텐트
- 다른 앱의 구성요소가 처리할 수 있도록 한다
- 인텐트 내용을 다른 여러 앱의 매니페스트 파일에서 선언된 인텐트 필터와 비교
- 호환되는 인텐트 필터가 여러 개 → 대화상자 표시, 사용자가 선택 가능
암시적 인텐트 수신
- <intent-filter> 사용, 인텐트 필터를 매니페스트 파일에 선언
- 각 인텐트 필터는 어느 유형의 인텐트를 수락할지 지정
- 시스템은 인텐트가 인텐트 필터 중 하나를 통과한 경우에만 암시적 인텐트를 앱 구성 요소에 전달
- 명시적 인텐트는 구성 요소가 어떤 인텐트 필터를 선언하든 무관
<action> | name 특성에서 허용된 인텐트 작업 선언 |
<data> | 허용된 데이터 유형 선언 |
<category> | name 특성에서 허용된 인텐트 카테고리 선언 |
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
암시적 인텐트 수신하려면 CATEGORY_DEFAULT 카테고리를 반드시 인텐트 필터에 포함해야 한다.
인텐트 확인
암시적 인텐트 수신 후, 인텐트를 인텐트필터에 세가지 측면으로 비교
1. 작업
2. 데이터
3. 카테고리
<intent-filter>
활동, 서비스, broadcast receiver가 응답할 수 있는 인텐트의 유형 지정
해당 구성 요소가 수신하고자 하는 인텐트의 유형
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
포함된 요소
<activity>
<activity-alias>
<service>
<receiver>
포함해야 하는 요소
<action>
포함 가능한 요소
<category>
<data>
<action>
인텐트 필터에 작업을 추가
인텐트필터에 <action> 요소가 없으면 필터가 Intent 객체를 허용하지 않음
포함된 요소
<intent-filter>
<action android:name="android.intent.action.MAIN" />
ACTION_MAIN이면 'android.intent.action.MAIN' 사용
ACTION_WEB_SEARCH이면 'android.intent.action.WEB_SEARCH' 사용
<action android:name="com.example.project.TRANSMOGRIFY" />
개발자가 직접 정의하는 작업의 경우 고유성을 위해 앱 패키지 이름을 접두사로 사용
<category>
인텐트 필터에 카테고리 이름 추가
<category android:name="string" />
포함된 요소
<intent-filter>
<data>
데이터 사양을 인텐트 필터에 추가
인텐트 필터의 scheme을 지정하지 않으면 다른 모든 URI 속성이 무시된다.
필터의 host를 지정하지 않으면 port 속성과 모든 경로 속성이 무시된다.
포함된 요소
<intent-filter>
<intent-filter . . . >
<data android:scheme="something" />
<data android:host="project.example.com" />
. . .
</intent-filter>
<intent-filter> 내부에 <data> 요소 다수 배치 가능 → 여러 데이터 옵션 제공
android:scheme | URI의 스키마 부분 URI를 지정하기 위한 최소한의 필수 속성 |
android:host | URI 권한의 호스트 부분 |