[2일차] Intent

2015. 5. 18. 17:34Rapa 수업/Android

반응형

Activity

- 사용자 인터페이스 화면을 의미

- UI 컴포넌트를 화면에 표시하고 시스템이나 사용자의 반응을 처리

- 1개의 Application은 여러 개의 Activity를 가질 수 있으며 Activity사이를 이동할 때 Back Stack(Task)을 이용

- Activity사이의 정보 전달은 Intent객체를 사용


Intent

컴포넌트 활성화

1. 같은 프로세스에 있는 타 컴포넌트를 호출할 때 (명시적 Intent)

 - 같은 프로세스 내에서는 Intent-filter를 생략 가능하다.

 Intent i = new Intent(자신의Context, 호출할 Component의 Class);

 startActivity(i);


2. 다른 프로세스에 있는 컴포넌트 호출

 -명시적 호출

(호출하는 Activity)

Intent i = new Intent();

ComponentName cp = new ComponentName(호출할 packageName, 호출할 componentName);

i.setComponent(cp);

startActivity(i);

(호출되는 Activity)

Intent Filter를 설정하지 않으면 위와 같이 SecurityException이 발생한다.

그러므로 다른 프로세스에서 접근할 수 있도록 Intent Filter를 설정해 줘야한다.

Intent Filter는 선언되는 순간 외부에 공개하겠다는 권한을 열어주게 된다.

이런식으로 액션값에 아무런 값이나 들어가도  SecurityException가 발생하지 않는다.

Intent Filter는 name값을 확인하지 않고 Intent Filter가 열려 있는지만 확인하기 때문이다. (ComponentName이 null일 때!)


같은 기능으로 Activity 속성에 android:exported="true" 를 주어도 가능하다.


-암시적 호출

(호출하는 Activity)

Intent i = new Intent("액션명");  (혹은 i.setAction("액션명") 도 가능)

startActivity(i);

(호출되는 Activity)

<intent-filter>

          <action android:name="액션명"/>

          <category android:name="android.intent.category.DEFAULT"/>

</intent-filter>

--System Action Name 으로 암시적 인텐트 사용 예 

컴포넌트에게 정보전달

1.ComponentName 
    -얘가 null이면 system은 Intent가 암시적이라고 인식한다.

2.Action

3.Category

4.Data

----- 위 세가지는 Intent Filter를 구성하는 요소. 암시적 인텐트 전달에서 컴포넌트를 구분하는 역할을 한다.

5.Extras

- 데이터를 전달 할 수 있다.

6.Flag

- 동적으로 Intent를 보내서 Activity를 제어할 수 있도록 한다.


반응형

'Rapa 수업 > Android' 카테고리의 다른 글

[5일차] Handler & AsyncTask  (0) 2015.05.22
[4일차]Android Application UI  (0) 2015.05.21
[3일차] Service & Broadcast Receiver (Basic)  (0) 2015.05.20
[2일차] Activity LifeCycle  (0) 2015.05.19
[1일차] Android Project 구조  (0) 2015.05.18