암시적 인텐트와 명시적 인텐트

인텐트는 엑티비티간의 통신에서 사용된다. 단순히 엑티비티의 호출만이 아니라 정보전달과 작업에 대한 정의도 갖고있다.

인텐트는의 호출은 startActivity()로 이루어진다.

인텐트는 암시적 인텐트와 명시적 인텐트 2가지로 나뉘는데, 암시적 인텐트는 호출대상이 명확하게 정의되지 않은 인텐트이며 명시적 인텐트는 호출대상이 명확히 정해진 인텐트이다.

1. 암시적 인텐트
 

 암시적 인텐트는 호출 대상이 명확하게 정의되어있지 않은 인텐트를 말한다. 주로 다른 어플리케이션의 컴포넌트를 호출 할 때 사용한다. 안드로이드 운영체제에서 암시적 인텐트에 포함된 정보로 설치된 모든 컴포넌트를 검색하여준다. 컴포넌트는 어플리케이션의 메니페스트에 등록되어 있는것을 검색한다. 따라서 메니페스트에서 엑티비티, 서비스등의 정보를 명확하게 해놓아야 한다.

암시적 인텐트에서는 Action, Data, Type, Category, Component, Extras, Flags를 사용하여 사용자가 원하는 컴포넌트를 찾게되어있다.

 1) Action
 

   실행하고자 하는 동작을 말하며 int타입으로 정의되어 있다.

 더 자세한 정보는 http://developer.android.com/reference/android/content/Intent.html 참조 

intent Action의 사용 예
전화걸기 화면으로 이동
intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:010-0000-0000"));
startActivity(intent);


홈페이지 이동
intent = newIntent(Intent.ACTION_VIEW,Uri.parse("http://whitegom.tistory.com/"));
startActivity(intent);
 


2) Data
 

 Data는 동작에 필요한 상세 데이터를 말한다. 위의 소스코드에서 전화걸기라면 'tel: 전화번호' 가 해당되며 홈페이지 이동이라면 'http://주소'가 해당된다. 전화번호와 주소와 같은 데이터는 URI타입으로 구성된다. 데이터에 접근 할 때에는 getData, setData를 사용한다.  

3) Type
 

 데이터의 Type는 자동으로 판별이 가능하다. 데이터에서 'http://'로 시작된다면 웹페이지를 의미하며, 'tel:'로 시작되는것은 전화번호를 의미한다. 사용자가 직접 지정 할 수도 있는데 이것은 getType, setType 메서드로 데이터의 MIME 타입을 직접 지정해야 한다.

Type 사용 예시 

외부 메일과 텍스트 사용 컨텍스트 호출

Intent it = new Intent(android.content.Intent.ACTION_SEND);
it.setType("text/plain"); // 타입지정

startActivity(Intent.createChooser(it, "Share")); // 다이얼 로그 제목 세팅 

4) Categort
 

 사용할 액션에 대한 상세정보를 제공한다. addCategoty, removeCategory로 추가 제거 가능하다.

5) Component
 

 인텐트를 사용할 컴포넌트를 명시적으로 지정한다. 이속성이 사용되면 명시적 인텐트로 전환된다. ( 기존 참조 정보들을 더이상 참조하지 않는다. )

6) Extras
 

 추가 전달 정보이며 키와 전달 데이터 쌍으로 지정된다. 

전달 메서드
Intent putExtra(String name, int value)
Intent putExtra(String name, String value)
Intent putExtra(String name, Boolean value)

리시브 메서드
int getIntentExtra(String name,int defaultValue)
String getStringExtra(String name)
boolean getBooleanExtra(String name, boolean defaultValue)

값이 전달되지 않았을 경우는 두번째 인자(defaultValue)로 값이 리턴되며 문자열은 null로 리턴된다. 

Extras 사용 예

String

//보내는 부분

String id = "아이디 입니다.";
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("ID", id);

// 받는 부분
String id = getIntent().getStringExtra("ID");

Boolean
// 보내는 부분
boolean setCheck = true;
Intent intent = new Intent(MainActivity.this, SubActivity.class);
intent.putExtra("CHECK", setCheck);

//받는 부분
boolean check = getIntent().getBooleanExtra("CHECK"false);



7) Flags
 

 엑티비티를 실해하는 방법이나 관리에대한 정보를 저장시킨다. setFlag로 플레그 전체를 대입하거나 addFlags로 특정 플레그만 지정한다.
 

 2. 명시적 인텐트

 명시적 인텐트는 호출되는 대상이 명확하게 지정된 경우를 말한다. 보통 자신의 하위 엑티비티를 호출하기위해 많이 사용된다. 엑티비티를 사용하기 위해서는 메니페스트에 반드시 등록을 해아하며 등록하지 않았다면 오류가 발생한다.
 
출처 - http://whitegom.tistory.com/22
접기

intent = new Intent(Intent.ACTION_VIEW,Uri.parse(mainActivity.this, SubActivity.class));
startActivity(intent);

* 간단한 명시적 인텐트 호출의 예 

댓글

가장 많이 본 글