티스토리 뷰

300x250
300x250



Explicit(명시적) intent?

활성화할 패키지명과 component 명을 정확히(명시적) 지칭하여 component 를 활성화.

일반적으로 본인의 앱 안에서 구성 요소를 시작할 때 쓰임.
(시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문)

예를 들어, 사용자 작업에 응답하여 새 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것 등이 여기에 해당.

 



Explicit intent 로 외부 패키지 활성화

아래와 같이 서로 다른 패키지의 activity 를 활성화 할 때 쓰임.

- com.parkho.intent1 패키지에서 com.parkho.intent2 의 TestActivity 를 실행

 

만약, 해당 option 이 없었다면 아무 패키지의 activity, service 를 임의로 실행시킬 수 있기 때문에 보안상 매우 취약하게 된다. (은행 관련 패키지 component 를 마음대로 실행할 수 있다고 생각해 보자!)

- "android:exported" option 을 true 로 하지 않고 호출하면 SecurityException 이 발생한다.



Explicit intent 전달

◼ Intent extra

Bundle 을 이용하여 intent 객체에 data 를 첨부할 수 있다.

첨부할 수 있는 data type 은 매우 다양하며 HashMap 을 이용한다.

보낼때 받을때 Data type 
 intent.putExtra("bool_data", true);  intent.getBooleanExtra("bool_data", false);  boolean
 intent.putExtra("int_data", 7);   intent.getIntExtra("int_data", 0);  integer
 intent.putExtra("string_data", "parkho");  intent.getStringExtra("string_data");  String

 

◼ Intent data

Intent extra 가 data 자체를 전달한다면 intent data 는 URI 를 이용하여 데이터가 존재하는 위치 정보를 전달한다.

 - URI (Uniform Resource Identifiers) : 자원을 나타내는 유일한 주소.

 

데이터 전달 시 용량이 클 경우(1M 가 넘는 데이터) intent extra 를 이용하는 것 보다 intent data 를 이용하는게 효율적이다.

 

◼ Intent data type

Intent data 전달 시 URI 의 data type(MIME type) 을 명시.

Data type 을 명시하여 intent 를 수신측에서 필요에따라 해당 type 에 맞는 루틴을 처리할 수 있도록 도와준다.

일반적으로 intent data 와 같이 사용하지만 type 만 명시할 수 있다.



Code

1. FirstActivity

 

2. SecondActivity

 

3 Manifest



위 예제는 하단 link 에서 확인할 수 있다.

https://github.com/parkho79/IntentSample



728x90

'Android > Intent' 카테고리의 다른 글

Intent 이미지 이동  (0) 2019.03.20
Intent extras size limit  (0) 2019.03.20
Intent (4) - Pending(보류) intent  (0) 2019.02.19
Intent (3) - Implicit(암시적) intent  (0) 2019.02.19
Intent (1)  (0) 2019.02.18
댓글