[안드로이드] 인텐트 객체
- 프로그래밍 정보
- 2010. 10. 17.
반응형
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
인텐트 객체
인텐트 객체는 하나의 정보 묶음입니다.
인텐트는 액션과 처리되는 데이터같은, 인텐트를 수신하게 되는 컴포넌트가 필요한 정보와, 인텐트 제어를 위한 컴포넌트 카테고리와 대상 액티비티를 실행하는 방법 같은 .. 시스템에 대한 추가적인 정보를 포함하고 있는 놈이지요.
인텐트에 포함하는 내용은 아래와 같습니다.
1. 컴포넌트 이름 : 인텐트를 제어하는 컴포넌트의 이름입니다. 이것은 ComponentName 객체의 대상 컴포넌트의 전체 경로 ( 예 : exam.project.Activity ) 이름과 컴포넌트가 위치한 어플리케이션의 매니페스트에 설정된 패키지 (exam.project 같은) 이름의 조합입니다.
전체 경로와 패키지 명이 반드시 일치할 필요는 없습니다. 컴포넌트 이름은 선택사항으로써 , 지정되면 인텐트 객체는 지정된 클래스의 인스턴스에 전달되는 것이지요. 지정되지 않으면 적절한 대상을 찾기위하여 인텐트 필터 등을 이용할 것입니다. 컴포넌트 이름은 setComponent(), setClass(), setClassName() 메소드로 설정하고 getComponent() 메소드로 얻을 수 있습니다.
2. 액션 : 수행 될 액션을 지정하는 문자열 상수입니다. 브로드캐스트 인텐트의 경우에는 보고될 액션이 되겠네요. 인텐트 클래스는 꽤 많은 액션 상수를 정의하고 있습니다.
기본 상수외에 커스텀된 액션 문자열을 정의할 수도 있습니다. 이때는 exam.project.CUSTOM_ACTION 처럼 어플리케이션 패키지를 꼭 포함해야 합니다.
액션은 메소드명이 리턴값을 결정하듯이, 인텐트의 Data와 Extras 부분의 구성을 결정해야 하지요. 때문에, 액션 이름은 상세하게 사용하는것이 좋고, 그것을 인텐트에 결합해야 됩니다. 즉, 독립형태로 액션을 정의하기보다는 컴포넌트가 제어할 수 있는 인텐트 객체에 대해 정의하는 것이지요.
인텐트 객체의 액션은 setAction() 메소드로 지정하고, getAction() 메소드로 얻을 수 있습니다.
3. 데이터 : 처리되어야할 데이터에 대한 URI 와 MIME 타입을 포함합니다. 서로 다른 액션들은 다른 종류의 데이터와 한쌍이되며, 예를들면 액션필드가 ACTION_EDIT 이라면 데이터필드는 편집을 위해 문서 URI를 포함합니다. 또 ACTION_CALL 이면 통화번호를 가진 tel: URI 가 되겠습니다. 또 ACTION_VIEW 에 데이터필드가 http: URI 라면 , 그것을 수행하는 액티비티는 다운로드를 작업하고 URI의 데이터를 보여주게 됩니다.
인텐트를 데이터처리 컴포넌트에 넘길 때에는 URI 에 대한 MIME 타입도 신경을 써야합니다. 이미지 데이터를 보여주는 컴포넌트가 비디오 재생을 위해 호출되는 일은 없어야 하겠죠~. 대부분의 경우 데이터 타입은 URI로부터 추측이 가능합니다. 특히 디바이스에 존재하는 데이터를 가리키는 CP 에 대한 content: URI 가 대표적이겠네요.
하지만 명시적으로도 지정이 가능하기때문에, setData() 메소드는 URI만 사용하여 데이터를 지정하고, setType() 메소드는 MIME 타입으로만, setDataAndType() 메소드는 URI와 MIME 타입 모두를 지정합니다. 여기에서 URI 는 getData() 로, 타입은 getType() 으로 얻을 수가 있습니다.
4. 카테고리 : 인텐트를 제어하는 컴포넌트의 종류에 대한 추가정보를 포함하는 문자열입니다. 인텐트 객체 내에는 여러개의 카테고리가 있을수도 있습니다. 인텐트 클래스는 몇가지 카테고리 상수도 가지고 있지요.
addCategory() 메소드는 인텐트 객체에 카테고리를 추가하고, removeCategory()메소드는 추가된 카테고리를 삭제하는 기능을 합니다. getCategories() 메소드가 있는 이것은 해당 객체의 모든 카테고리를 얻어옵니다.
5. 엑스트라 : 추가정보에 대한 키/값 쌍이 인텐트를 제어하는 컴포넌트에 전달 될 수 있습니다. 액션이 데이터 URI 와 한쌍을 이루는 것처럼, 어떤 액션은 특정 엑스트라와 한 쌍을 이루게 됩니다. ACTION_TIMEZONE_CHANGED 는 새로운 시간을 나타내는 "time-zone" 엑스트라를 가지며, ACTION_HEADSET_PLUG 는 "name" 과 헤드셋 연결 여부를 나타내는 "state" 엑스트라를 가집니다.
커스텀 액션을 정의했다면 엑스트라 키/값 쌍에서 지정될 수 있습니다. 인텐트 객체에는 엑스트라 데이터에 타입을 추가하는 put...() 메소드가 있고, 그것들을 읽어올 수 있는 get...() 메소드도 있습니다. 그러한 메소드들은 번들 객체에 의한 메소드들과 함께 움직이는 구조입니다.
즉, 엑스트라는 putExtras() 메소드와 getExtras() 메소드를 사용하여 번들로써 설치되거나 읽혀질 수 있다는 의미입니다.
6. 플래그 : 모든 플래그들은 인텐트 클래스에서 정의되며, 다양한 종류가 있습니다. 액티비티가 어느 태스크에 속하는지, 액티비티가 리스트에 존재하는지 등을 지시합니다.
전체 경로와 패키지 명이 반드시 일치할 필요는 없습니다. 컴포넌트 이름은 선택사항으로써 , 지정되면 인텐트 객체는 지정된 클래스의 인스턴스에 전달되는 것이지요. 지정되지 않으면 적절한 대상을 찾기위하여 인텐트 필터 등을 이용할 것입니다. 컴포넌트 이름은 setComponent(), setClass(), setClassName() 메소드로 설정하고 getComponent() 메소드로 얻을 수 있습니다.
2. 액션 : 수행 될 액션을 지정하는 문자열 상수입니다. 브로드캐스트 인텐트의 경우에는 보고될 액션이 되겠네요. 인텐트 클래스는 꽤 많은 액션 상수를 정의하고 있습니다.
상 수 |
대상 컴포넌트 |
액션 |
---|---|---|
ACTION_CALL
|
activity | 전화걸기 |
ACTION_EDIT
|
activity | 사용자에게 편집할 수 있는 데이터를 표시 |
ACTION_MAIN
|
activity | 데이터 입출력 없이 태스크의 최초 액티비티로 액티비티를 실행 |
ACTION_SYNC
|
activity | 디바이스의 데이터와 서버의 데이터를 동기화 |
ACTION_BATTERY_LOW
|
broadcast receiver | 배터리 부족 경고 통보 |
ACTION_HEADSET_PLUG
|
broadcast receiver | 헤드셋이 디바이스에 연결/분리 통보 |
ACTION_SCREEN_ON
|
broadcast receiver | 스크린이 커졋을때 통보 |
ACTION_TIMEZONE_CHANGED
|
broadcast receiver | 타임존 설정 변경 |
기본 상수외에 커스텀된 액션 문자열을 정의할 수도 있습니다. 이때는 exam.project.CUSTOM_ACTION 처럼 어플리케이션 패키지를 꼭 포함해야 합니다.
액션은 메소드명이 리턴값을 결정하듯이, 인텐트의 Data와 Extras 부분의 구성을 결정해야 하지요. 때문에, 액션 이름은 상세하게 사용하는것이 좋고, 그것을 인텐트에 결합해야 됩니다. 즉, 독립형태로 액션을 정의하기보다는 컴포넌트가 제어할 수 있는 인텐트 객체에 대해 정의하는 것이지요.
인텐트 객체의 액션은 setAction() 메소드로 지정하고, getAction() 메소드로 얻을 수 있습니다.
3. 데이터 : 처리되어야할 데이터에 대한 URI 와 MIME 타입을 포함합니다. 서로 다른 액션들은 다른 종류의 데이터와 한쌍이되며, 예를들면 액션필드가 ACTION_EDIT 이라면 데이터필드는 편집을 위해 문서 URI를 포함합니다. 또 ACTION_CALL 이면 통화번호를 가진 tel: URI 가 되겠습니다. 또 ACTION_VIEW 에 데이터필드가 http: URI 라면 , 그것을 수행하는 액티비티는 다운로드를 작업하고 URI의 데이터를 보여주게 됩니다.
인텐트를 데이터처리 컴포넌트에 넘길 때에는 URI 에 대한 MIME 타입도 신경을 써야합니다. 이미지 데이터를 보여주는 컴포넌트가 비디오 재생을 위해 호출되는 일은 없어야 하겠죠~. 대부분의 경우 데이터 타입은 URI로부터 추측이 가능합니다. 특히 디바이스에 존재하는 데이터를 가리키는 CP 에 대한 content: URI 가 대표적이겠네요.
하지만 명시적으로도 지정이 가능하기때문에, setData() 메소드는 URI만 사용하여 데이터를 지정하고, setType() 메소드는 MIME 타입으로만, setDataAndType() 메소드는 URI와 MIME 타입 모두를 지정합니다. 여기에서 URI 는 getData() 로, 타입은 getType() 으로 얻을 수가 있습니다.
4. 카테고리 : 인텐트를 제어하는 컴포넌트의 종류에 대한 추가정보를 포함하는 문자열입니다. 인텐트 객체 내에는 여러개의 카테고리가 있을수도 있습니다. 인텐트 클래스는 몇가지 카테고리 상수도 가지고 있지요.
상 수 |
의 미 |
---|---|
CATEGORY_BROWSABLE
|
대상 액티비티는 링크 참조 데이터(이미지, 이메일 등)을 보여주기 위하여 브라우저에 의해 안전하게 호출됨 |
CATEGORY_GADGET
|
액티비티는 가젯들을 보유한 다른 액티비티내에 포함될 수 있음 |
CATEGORY_HOME
|
액티비티 홈 화면을 보여줌. 디바이스를 켯을때, 또는 HOME 키를 눌러 돌아갔을 때 사용자가 보게 될 첫번째 화면 |
CATEGORY_LAUNCHER
|
하나의 태스크에서 최초의 액티비티가 될 수 있고, 최상위 계층의 런처에 포함됨 |
CATEGORY_PREFERENCE
|
대상이 되는 액티비티는 설정을 위한 패널임 |
addCategory() 메소드는 인텐트 객체에 카테고리를 추가하고, removeCategory()메소드는 추가된 카테고리를 삭제하는 기능을 합니다. getCategories() 메소드가 있는 이것은 해당 객체의 모든 카테고리를 얻어옵니다.
5. 엑스트라 : 추가정보에 대한 키/값 쌍이 인텐트를 제어하는 컴포넌트에 전달 될 수 있습니다. 액션이 데이터 URI 와 한쌍을 이루는 것처럼, 어떤 액션은 특정 엑스트라와 한 쌍을 이루게 됩니다. ACTION_TIMEZONE_CHANGED 는 새로운 시간을 나타내는 "time-zone" 엑스트라를 가지며, ACTION_HEADSET_PLUG 는 "name" 과 헤드셋 연결 여부를 나타내는 "state" 엑스트라를 가집니다.
커스텀 액션을 정의했다면 엑스트라 키/값 쌍에서 지정될 수 있습니다. 인텐트 객체에는 엑스트라 데이터에 타입을 추가하는 put...() 메소드가 있고, 그것들을 읽어올 수 있는 get...() 메소드도 있습니다. 그러한 메소드들은 번들 객체에 의한 메소드들과 함께 움직이는 구조입니다.
즉, 엑스트라는 putExtras() 메소드와 getExtras() 메소드를 사용하여 번들로써 설치되거나 읽혀질 수 있다는 의미입니다.
6. 플래그 : 모든 플래그들은 인텐트 클래스에서 정의되며, 다양한 종류가 있습니다. 액티비티가 어느 태스크에 속하는지, 액티비티가 리스트에 존재하는지 등을 지시합니다.
결국에는 안드로이드 시스템과 플랫폼의 어플리케이션 모두는 , 시스템에서 발생된 브로드캐스트를 방송하고, 시스템이 정의한 컴포넌트를 활성화 하기 위하여 인텐트 객체를 사용하는 것 입니다.
끝~~
관련글
반응형