본문 바로가기
Android/Chapter

[Android] Chapter1. Intent의 정의 및 사용법

by hyun's life_developer 2019. 10. 7.

안녕하세요 초보개발자 시아아빠입니다.

 

안드로이드에서 가장 기본이 되는 Intent에 대해 알아보겠습니다.

 

화면을 만드는 것만큼이나 중요한 것이 화면에서 다음 화면으로 넘어가는 것인데요. 이때 쓰는 것이 Intent입니다.

 

Intent의 정의부터 보겠습니다.

 

1. Intent의 정의

*Intent란?

안드로이드 어플리케이션을 구성하는 4가지 기본 요소에는

 Activity, Service, Broadcast Receiver, Content Provider가 있다.

Intent(인텐트)란 이러한 어플리케이션 구성요소(컴포넌트) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다. 즉, Intent는 메시징 객체로, 다른 앱 구성 요소로부터 작업을 요청하는데 사용한다.

 

*Intent의 사례

이에따라, Intent가 구성요소 사이의 통신을 촉진하는 방식에 주요 사례는 3가지다.

1) 액티비티 시작

2) 서비스 시작

3) 브로드캐스트 전달

 

 

2. Intent의 사용법

*Intent의 유형

인텐트에는 2가지의 유형이 있다.

 

명시적 인텐트 

 - 말 그대로 Intent를 충족하는 애플리케이션이 무엇인지 명시해준다. 명시적 인텐트는 보통 앱 안에서 구성요소를 시작할때 쓴다. 시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문이다.

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

ex) 다음은 첫번째 화면(FirstActivity)에서 두번째 화면(SecondActivity)로 넘어가는 예이다.

>FirstActivity.java

Intent intent = new Intent(getApplicationContext(), SecondActivity.class)
startActivity(intent);

 

암시적 인텐트

- 특정 구성요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성요소가 

이를 처리할 수 있도록 해준다. 예를 들어, 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 Intent를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청할 수 있다.

암시적 인텐트를 사용하면 Android 시스템에서 시작할 적절한 구성요소를 찾는데, 이때 인텐트의 내용을 기기에 있는 다른 여러 앱의 Manifest 파일에서 선언된 Intent Filter와 비교하는 방법을 사용한다.

해당 Intent와 일치하는 Intent Filter가 있으면 시스템에서 해당 구성요소를 시작하고 이를 Intent 객체를

전달한다.

암시적 인텐트가 시스템을 통해 전달되어 FirstActivity에서 SecondActivity를 시작하는 방법

 

ex) '시아아빠의 초보개발자 탈출기' 블로그로 보내기

(암시적 인텐트를 사용하는 이유 : URI라던지 내가 만들지 않은 앱이라면 컴포넌트의 이름을 정확히 명시할 수 없어서)

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://siadaddy-cordinglife.tistory.com"));
startActivity(intent);

이와같은 방법으로 다른 앱을 호출하거나 uri를 띄우는 등이 암시적 인텐트에 해당된다.

 

위의 이해를 돕기위해 인텐트 필터에 대해 간략히 설명하고 넘어가겠다. 

 

**인텐트 필터

 - 안드로이드 어플리케이션을 만들 때 Manifest라는 파일이 있고, 파일 내용 중 Intent-filter라는 것이 있다.

예를 들어 컴포넌트 A가 컴포넌트 B로 인텐트를 보낼 시,

명시적 인텐트라면 컴포넌트 B는 바로 인텐트를 받았을 것이다.

하지만 암시적 인텐트라면 컴포넌트 B는 이 인텐트가 자신의 속성과 부합하는지 확인을 해야할 것이다.

이러한 확인 작업을 위해 Intent-filter라는 것이 존재한다.

 

인텐트 필터에 대해 더 자세한 내용은 다음 글에서 볼 수 있다.

 

 

 


댓글