Intent(인텐트)

CODEDRAGON Development/Android

반응형

   

인텐트

인텐트란 애플리케이션의 컴포넌트, 구체적으로 말하자면 액티비티, 서비스, 브로드캐스트리시버에게 작업을 요청하기 위해 필요한 데이터를 전달해주는 메시지에 해당하는 '전달 객체'로 보통 '인텐트 객체'라고 합니다.

 

   

인텐트 생성

명시적 인텐트

(Explicit Intent)

호출 대상 컴포넌트의 이름이 명시되어 있는 인텐트 즉, 어떤 것을 호출해야 할지 명시되어 있는 인텐트

new Intent(Context packageContext, class cls);

ex) new Intent(this,SampleActivity.class)

암시적 인텐트

(Implicit Intent)

호출 대상 컴포넌트가 정확히 정해진 것이 아니라, 호출 대상 컴포넌트의 특성만 나열되어 있는 인텐트

new Intent(String action, Uri uri);

ex)

Uri tel=Uri.parse("tel:01056781234");

new Intent(Intent.ACTION_DIAL,tel);



 

인텐트 호출

startActivity()

startActivity(new Intent(Intent.Action_DIAL,tel));

startActivityForResult()

//호출

private Static final int PICK_REQUEST=1337;

....

String str=Uri.parse(type.getText().toString());

Intent intent=new Intent(Intent.ACTION_PICK,str);

startActivityForResult(intent,PICK_REQUEST);

 

//실행된 액티비티가 종료되면 onActivityResult() 메소드가 호출

protected void onActivityResult(int requestCode,int resultCode,Intent data){

if(requestCode==PICK_REQUEST){

if(resultCode==RESULT_OK){

startActivity(new Intent(Intent.ACTION_VIEW,data.getData()));

}

}

}

   

 

인텐트로 데이터 전달

인텐트로 호출할 액티비티에 전송할 데이터 셋팅

 

Intent intent=new Intent(this,IntentCallee.class);

intent.putExtra("name","전송할 문자열"); <- 전송할 문자열 셋팅

startActivity(intent);

 

실행된 액티비티에서 인테트를 호출한 후 문자열 추출

 

Intent intent=getIntent();

String name=intent.getExtras().getName("name").toString(); ß 전송된 문자열 추출

 

   

인텐트의 구성 요소

 

인텐트의 종류와 구성 요소

명시적 인텐트

암시적 인텐트

컴포넌트 이름

액션(Action)

 

카테고리(Category)

  

데이터(Data)

  

데이터 타입(MIME Type)

  

엑스트라(Extras)

   

 

컴포넌트 이름

애플리케이션 내 클래스 이름 또는 애플리케이션의 AndroidManifest.xml 파일에서 설정된 패키지 이름과 클래스 이름의 조합입니다.

 

컨포넌트 이름은 setComponent(), setClass(), 또는 setClassName() 메서드에 의해 설정되고 getComponent()에 의해 읽혀지게 됩니다.

   

   

Action(행동)

인텐트 액션은 수행되어야 하는 작업 내용으로 인텐트 액티비티 액션과 브로드캐스트 액션으로 나뉩니다.

액티비티 액션

액티비티를 호출하겠다는 액션

브로드캐스트 액션

브로드캐스트리시버를 호출하겠다는 액션

   

액티비티 액션

액션 상수

설명

ACTION_MAIN

시작하는 액티비티를 지정합니다.

ACTION_VIEW

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 사용자에게 보여주라는 액션입니다.

ACTION_EDIT

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 변경하라는 액션입니다.

ACTION_DELETE

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 삭제하라는 액션입니다.

ACTION_DEFAULT

ACTION_VIEW와 동일합니다.

ACTION_PICK

데이터에서 하나(URI)를 선택하여 정보를 반환하라는 액션입니다.

ACTION_GET_CONTENT

데이터에서 하나의 컨텐트를 선택하여 반환하라는 액션으로 액티비티에 의하여 신규 작성한 데이터를 반환하는 것도 가능합니다.

ACTION_RUN

데이터를 실행시키는 액션입니다.

ACTION_INSERT

빈 아이템을 작성하라는 액션입니다.

ACTION_CALL

전화 연결을 요청하는 액션입니다.

실제로 전달된 전화 번호로 전화를 겁니다.

ACTION_DIAL

전화 연결을 요청하는 액션입니다.

전화 다이얼패드 화면으로 이동합니다.

ACTION_SENDTO

데이터의 메시지를 보내라는 액션입니다.

ACTION_ANSWER

전화 착신에 관한 액션입니다.

ACTION_SYNC

데이터와 서버의 데이터를 동기화하라는 액션입니다.

 

인텐트 객체의 액션을 설정하는 메서드로 setAction()에 의해 설정될 수 있으며, getAction()메서드에 의해서 읽게 된다.

 

브로드캐스트 액션

브로드캐스트 액션 상수

설명

ACTION_BATTERY_CHANGED

배터리 잔량의 변화를 알림

ACTION_BATTERY_LOW

배터리 부족 경고

ACTION_BOOT_COMPLETED

시스템 부팅 완료 알림

ACTION_DATE_CHANGE

날짜 변경 알림

ACTION_HEADSET_PLUG

헤드셋이 디바이스에 연결되었거나 또는 분리되었다는 것을 알림

ACTION_PACKAGE_ADDED

애플리케이션 패키지 추가 시 알림

ACTION_PACKAGE_REMOVED

애플리케이션 패키지 제거 시 알림

ACTION_SCREEN_ON

스크린이 켜졌음을 알림

ACTION_TIMEZONE_CHANGED

타임존 변경 시 알림

ACTION_TIME_CHANGED

시간 지정 시 알림

ACTION_TIME_TICK

매시간 변경 시 알림

   

 

Category(분류)

인텐트를 수신하여야 할 컴포넌트의 종류에 대한 정보를 포함하는 문자열을 정의합니다. 주로 수신받을 액티비티와 관련되어 안드로이드에서 몇 가지의 카테고리 상수를 제공하고 있습니다.

 

카테코리 상수

설명

CATEGORY_BROWSABLE

타켓 액티비티는 링크에 의해 참조되는 데이터(예를 들어 이미지나 이메일 메시지)를 보여주기 위해 브라우저가 호출 되어야 합니다.

CATEGORY_HOME

디바이스가 켜질 때, HOME 키가 눌렸을 때 사용자가 보게되는 첫 번째 화면인 액티비티의 홈 화면을 보여주는 액티비티가 되어야 합니다..

CATEGORY_LAUNCHER

액티비티는 하나의 태스크에서 최초로 생성된 액티비티가 되며, 최상위 계층의 애플리케이션으로 시작됩니다.

CATEGORY_PREFERENCE

타깃 액티비티는 설정 프레퍼런스입니다.

 

   

Data(데이터)

Data는 호출 대상 액티비티가 처리해 주었으면 하는 데이터 "주소"입니다.(실제 데이터가 아닙니다)

이러한 주소는 URI(Uniform Resource Identifier) 형식으로 정의되어 있으며, 전화번호, 웹 주소 등 다양한 형태가 있습니다.

 

예) 액션이 'ACTION_DIAL'이라면, 데이터 필드는 통화해야 할 전화번호를 가진 'tel:URI'을 가져야 합니다.

   

 

MIME Type(종류)

  • 인텐트 객체 내의 데이터는 데이터의 "주소"만을 나타낼 뿐, 주소 자체에서 해당 URI가 가리키는 데이터의 종류가 어떤 것인지는 알 수가 없습니다.
  • 실제 데이터의 종류가 음악이 될 수도 있고, 영상이 될 수도 있고, 연락처, 메모 등 어떤 것이든 될 수 있습니다. 즉, Type은 데이터의 "종류"를 지정하여 인텐트 해석 과정에서 정확하게 대상 컨포넌트를 찾을 수 있도록 해 줍니다.

 

   

Extra(추가 정보)

인텐트는 엑스트라(Extras)에 필요한 값을 입력하면 안드로이드는 엑스트라 값을 번들(bundle) 객체로 바꿉니다. 위에서 만들어진 번들 객체는 인텐트를 사용하여 애플리케이션 컴포넌트를 호출할 때 해당 컴포넌트에 전달됩니다.

 

   

플래그

다양한 종류의 플래그(Flags)는 대부분 안드로이드 시스템에게 액티비티를 시작시키는 방법과 시작 이후 액티비디를 다루는 방법을 알려줍니다.

 

Intent i = new Intent(this, Test.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);

   

플래그

설명

FLAG_ACTIVITY_CLEAR_TOP

실행할 액티비티가 태스크에 이미 있다면 태스크에 있는 동일한 액티비티부터 최상단의 액티비티까지 모두 제거하고 새로운 액티비티를 실행하는 플래그입니다.

그래서 태스크 스택에 A, B, C, D가 있을 때, 이 플래그를 지정해서 B를 호출하면 B, C, D가 모두 스택에서 제거됩니다.

그리고 새로운 B 액티비티가 스택에 추가됩니다.

FLAG_ACTIVITY_SINGLE_TOP

실행할 액티비티가 태스크 스택 최상단에 이미 있다면 액티비티를 다시 실행하지 않는 플래그입니다. 다시 실행하지 않는다는 것은 태스크에 존재하는 액티비티를 재사용한다는 것을 의미합니다. 재사용한다는 것은 액티비의 많은 리소스와 사용자가 입력했던 데이터들을 그대로 유지할 수 있다는 것을 의미합니다

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

사용자가 홈 스크린이나 "최근 실행 액티비티 목록"에서 태스크를 시작할 경우 시스템이 설정하는 플래그입니다.

이 플래그는 새로 태스크를 시작하거나 백그라운드 태스크를 포그라운드로 가지고 오는 경우가 아니라면 영향을 주지 않습니다.

"최근 실행 액티비티 목록" 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다.

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

태스크를 재시작할 때 액티비티를 종료할 수 있도록 액티비티에 표시를 하는 플래그입니다.

이 플래그에 의해 표시된 액티비티들은 태스크가 백그라운드에 있다가 포그라운드(전면)에 보이게 될 때 태스크 스택에서 제거됩니다. 단, 해당 태스크는 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 플래그가 설정되어 있어야 합니다.

FLAG_ACTIVITY_NEW_TASK

실행한 액티비티와 관련된 태스크가 존재하면 동일한 태스크 내에서 실행하고, 그렇지 않으면 새로운 태스크에서 액티비티를 실행하는 플래그입니다.

FLAG_ACTIVITY_MULTIPLE_TASK

액티비티를 항상 새로운 태스크에서 실행하는 프래그이며, FLAG_ACTIVITY_NEW_TASK와 함께 사용해야 동작합니다.

FLAG_ACTIVITY_CLEAR_TASK

태스크를 초기화하는 플래그입니다.

액티비티가 이 플래그와 함께 호출되면 태스크에 존재하던 다른 액티비티는 모두 종료됩니다. 이 플래그는 반드시 FLAG_ACTIVITY_NEW_TASK 플래그와 함께 사용되어야 합니다.

FLAG_ACTIVITY_FORWARD_RESULT

액티비티 처리 결과를 전달할 수 있는 플래그입니다.

액티비티에서 다른 액티비티를 호출해서 결과 값을 받고 싶을 때 사용하는 것이 startActivityForResult(), setResult(), onActivityResult()메서드입니다.

FLAG_ACTIVITY_NO_HISTORY

실행한 액티비티를 태스크 스택에서 관리하지 않도록 해주는 플래그입니다.

FLAG_ACTIVITY_REORDER_TO_FRONT

실행한 액티비티가 태스크에 이미 존재하는 액티비티라면 새로 실행하지 않고 태스크에 있는 액티비티를 스택 최상단으로 옮기는 플래그입니다.

FLAG_ACTIVITY_NO_ANIMATION

액티비티 전환 시 애니메이션을 사용하지 않게 하는 플래그입니다.

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

"최근 실행 액티비티 목록"에 보이지 않도록 하는 플래그입니다." 최근 실행 익티비티 목록"은 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다.

FLAG_ACIVITY_BROUGHT_TO_FRONT

태스크 스택에 있는 액티비티가 다시 실행되었을 때 시스템이 설정하는 플래그입니다.

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

액티비티가 "최근 실행 액티비티 목록"에서 실행될 경우 시스템이 설정하는 플래그입니다.