본문 바로가기

Android Developers/manifest

Intent, <intent-filter>, <action>, <category>, <data>

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 권한의 호스트 부분