●인텐트(intent) 개념
- 어플리케이션 구성요소를 호출하거나 메시지를 보낼 때 사용하고, 정보의 형태에 따라 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent)로 나뉜다.
●인텐트가 포함할 수 있는 정보의 종류
① 컴포넌트의 이름 - 호출할 액티비티, 서비스나 메시지를 보낼 브로드캐스트 리시버 등의 이름을 포함한다. 이때 인텐트를 받을 대상 컴포넌트의 이름을 직접 입력하면 명식적 인텐트이다.
② 액션(Action) - 인텐트를 통해 수행할 동작을 지정하거나 브로드캐스트 메시지일 경우 특정 상태를 의미한다. 안드로이드의 기본 액션 외에 사용자가 액션을 만들어 사용할 수도 있다. 인텐트는 하나의 액션만을 가진다.
ex)
액션 | 대상 컴포넌트 | 의미 |
android.intent.action.CALLL | 액시비티 | 전화 건다. |
android.intent.action.EDIT | 액시비티 | 데이터를 편집한다. |
android.intent.action.MAIN | 액시비티 | 태스크의 첫 액티비티로 액티비티를 시작한다. |
android.intent.action.BATTERY_LOW | 브로드캐스트 리시버 | 베터리 수준이 낮음을 뜻한다. |
android.intent.action.SCREEN_ON | 브로드캐스트 리시버 | 단말기 화면이 켜졌음을 뜻한다. |
③ 카테고리 - 액션과 함께 컴포넌트의 특징을 나태내는 항목이다. 카테고리는 액션과 달리 하나의 인텐트가 여러개의 카테고리를 가질 수 있다.
ex)
카테고리 | 의미 |
android.intent.category.HOME | 홈화면을 표시한다. |
android.intent.category.LAUNCHER | 액티비티가 어플리케이션의 런처에 표시되고 태스크의 첫 액티비티가 될 수 있다. |
android.intent.category.PREFERENCE | 환경설정을 표시한다. |
④ 데이터 - 인텐트는 대상 컴포넌트에서 처리할 동작 뿐 아니라 처리할 데이터를 전달할 수도 있다. 데이터는 URI형태로 구성되고, 데이터의 종류에 따라 타입(MIME Type이 다르다.
ex)
종류 | 형태 | 타입(MIME Type) | 의미 |
URL | http://www.naver.com | X | 사이트 주소 |
미디어(사진,JPEG) | content://media/external/images/media/1 | image/jpeg | 이미지 |
미디어(음악) | content://media/external/images/audio/1 | audio/mp3 | 오디오 |
전화번호 | tel:01011112222 | X | 전화번호 |
좌표 | geo:37.111111-222.333333 | X | 특정 지역 좌표 |
⑤ 타입(MIME Type) - 데이터의 속성이다.
ex)
종류 | 타입(MIME Type) |
JPEG 이미지 | audio/mp3 |
MP3 오디오 | video/mp4 |
MP4 비디오 | image/jpeg |
콘텐트 프로바이더 제공 컨텐츠 | vnd.android.cursor.dir/vnd.google.note |
⑥ 부가 정보(extras) - 인텐트를 통해 컴포넌트를 호추하거나 메시지를 보내면서, URI형식이 아닌 데이터를 전달할 때 사용한다. 부가 정보는 Bundle 객체에 키-값 쌍(Key-value pair)을 통해 저장된다.
●명시적 인텐트
- 호출하거나 메시지를 보낼 대상의 컴포넌트 이름이 지정되어 있는 인텐트이다. 명시적 인텐트를 사용하면 대상 컴포넌트에 인텐트 필터가 정의되어 있지 않더라도 컴포넌트를 호출하거나 메시지를 보낼 수 있다.
●암시적 인텐트
- 명시적 인텐트와는 달리 액션, 카테고리, 데이터와 같은 특징을 포함하고 있는 인텐트이다. 암시적 인텐트는 인텐트 해석 과정이 필요하고, 이 과정에서 인텐트 조건에 맞는 컴포넌트를 찾기 위해 각 컴포넌트에 정의도니 인텐트 필터를 검색한다. 그래서 컴포넌트가 암시적 인텐트를 받으려면 반드시 인텐트 필터를 정의해야 한다.
●인텐트 필터(Intent Filter)
- 인텐트 내의 여러 정보를 바탕으로 가장 적절한 대상 컴포너트를 찾는 과정을 인텐트 해석(Intent Resolving)라고 한다. 인텐트 해석 과정에서 인텐트 내의 정보와 각 컴포넌트의 정보를 비교한다. 이런 비교를 위해 각 컴포넌트는 자신이 받을 수 있는 인텐트의 종류를 매니페스트에 정의한다. 이것을 인텐트 필터(Intent Filter)라고 한다. 안드로이드에서 발생하는 인텐트중 대부분이 암시적 인텐트이고, 이 중에서 자신에게 필요한 인텐트만 받기 위해 인텐트 필터를 사용한다.
●암시적 인텐트 사용 이유
- 명시적 인텐트는 같은 어플리케이션 내의 컴포넌트 사이에서만 사용이 가능하기 때문에 다른 어플리케이션 내의 컴포넌트를 사용하려면 암시적 인텐트를 사용해야 한다. 또한 홈화면,다이얼러 등의 호출 모두 암시적 인텐트를 통해 이루어지기 때문에 암시적 인텐트를 지원해야 한다.
●인텐트 필터 구성 요소
- 인텐트 필터는 인텐트 내 정보들을 바탕으로 원하는 인텐트를 선별하낟. 인텐트 필터에는 자신이 받을 수 있는 인텐트의 특성이 정의되어 있다. 어떤 컴포넌트가 암시적 인텐트를 받으려면 매니페스트에 인텐트 필터를 써야한다.
ex)
<activity android:name=".Tester"
android:label="@string/aaa">
<intent-filter>
<action anroid:name="android.intent.action.MAIN" />
<category android:name:"android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
①액션(action)
- 인텐트 내의 액션을 검사하여 인텐트 필터에 정의도니 액션과 일치하는지 여부를 검사한다. 인텐트 내의 액션이 인텐트 필드에 정의된 액션과 일치하면 이 검사를 통과한다. 또한 인텐트에 액션이 아예 정의되어 있지 않은 경우에도 이 검사를 통과한다.
②카테고리(category)
- 인텐트 내의 카테고리를 검사하여 인텐트 필터에 정의도니 카테고리와 일치하는지를 검사한다. 액션 검사는 인텐트에 정의되어 있지 않을 때도 검사를 통과할 수 있었지만, 카테고리 검사는 정확히 일치해야 통과할 수 있다. 단, 암시적 인텐트를 사용할 때는 따로 카테고리를 추가하지 않아도 안드로이드가 시스템이 자동으로 디폴트 카테고리를 추가해준다. 그래서 암시적 인텐트를 받으려면 인텐트 필터에 디폴트 카테고리가 정의되어 있어야 한다.
③데이터(data)
- 인텐트 내의 데이터를 검사하여 인텐트 필터에 정의된 데이터 유형과 일치하는지 검사한다. 데이터 검사는 URI 검사과 유형(MIME Type) 검사로 나뉜다.
●어플리케이션 컴포넌트에 인텐트 필터 추가히기
- 그냥 xml코드에다가 직접 작성하는게 편하다
●어플리케이션 컴포넌트에 인텐트 필터 추가
매니페스트에 들어가서 하단 application탭을 누르고 하단 Application Nodes에서 인텐트 필터를 추가할 컴포넌트를 선택 후 Add버튼을 누른다.
ok버튼을 누르면 아래 그림처럼 인텐트 필터가 추가된다. 인텐트 필터를 선택후 Add버튼을 누른다.
아래 그림에서 추가할 action, category, data 선택해서 ok버튼을 누른후 Application Nodes 오른쪽 Attributes에서 설정해 준다.
●명시적 인텐트 사용하기
●암시적 인텐트 사용하기
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 버튼의 리스너 작성 (0) | 2012.06.20 |
---|---|
안드로이드 액티비티의 화면 구성하기-레이아웃(layout) (0) | 2012.03.01 |
안드로이드 매니페스트(manifest) (0) | 2012.02.25 |
안드로이드 액티비티(Activity) (0) | 2012.02.23 |
안드로이드 리소스(Resources) (0) | 2012.02.23 |
댓글