관리 메뉴

나만을 위한 블로그

[Android] 인텐트 필터란? 본문

Android

[Android] 인텐트 필터란?

참깨빵위에참깨빵 2021. 9. 30. 23:22
728x90
반응형

안드로이드 디벨로퍼에선 인텐트 필터를 이렇게 말하고 있다.

 

https://developer.android.com/guide/components/intents-filters?hl=ko 

 

인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

An Intent is a messaging object you can use to request an action from another app component . Although intents facilitate communication between components in several ways, there are three fundamental use cases: An Activity represents a single screen in…

developer.android.com

인텐트 필터는 인텐트의 작업, 데이터 및 카테고리를 기반으로 어느 유형의 인텐트를 수락하는지 지정한다. 시스템은 인텐트가 인텐트 필터 중 하나를 통과한 경우에만 암시적 인텐트를 앱 구성 요소에 전달한다.

참고) 명시적 인텐트는 항상 자신의 대상에게 전달되며, 이는 구성 요소가 어떤 인텐트 필터를 선언하든 무관하다.

각 인텐트 필터는 앱의 매니페스트에 있는 <intent-filter> 요소에서 정의하고, 이는 대응되는 앱 구성 요소에서 중첩된다.

참고) 암시적 인텐트를 수신하려면 CATEGORY_DEFAULT 카테고리를 인텐트 필터에 포함해야 한다. 이 카테고리를 인텐트 필터에서 선언하지 않으면 액티비티에 어떤 암시적 인텐트도 확인되지 않는다.

여러 가지 종류의 인텐트를 처리하고자 하되 특정 조합의 작업, 데이터, 카테고리 유형으로만 한정하고자 할 때는 여러 인텐트 필터를 생성해야 한다.

 

명시적 인텐트보단 암시적 인텐트를 사용할 때 사용되며, 매니페스트에서 <intent-filter> 태그를 만들어 사용한다.

여러 인텐트를 처리하려면 그만큼 인텐트 필터를 생성해야 한다. 그 외에는 대략적인 사용법과 주의점 등이 써 있어서 생략했다.

 

하지만 이걸 봐선 인텐트 필터가 뭔지 모르겠다. 다른 글들을 참고해봤다.

 

https://www.charlezz.com/?p=859 

 

안드로이드의 IntentFilter란? | 찰스의 안드로이드

IntentFilter란? Intent는 명시적 인텐트와 암시적 인텐트로 나뉩니다. 그중 암시적 인텐트를 통해 사용자로 하여금 어느 앱을 사용할지 선택하도록 하고자 할때 IntentFilter가 필요합니다. 예를 들어

www.charlezz.com

암시적 인텐트를 통해 사용자가 어느 앱을 사용할지 선택하도록 할 때 인텐트 필터가 필요하다. 사용자가 다른 사람들과 공유하고 싶은 컨텐츠를 가진 경우 ACTION_SEND라는 Action이 있는 인텐트를 만든 다음, 공유할 컨텐츠를 지정하는 Extra를 추가하면 된다. 해당 인텐트로 startActivity()를 호출하면, 사용자가 어느 앱을 통해 컨텐츠를 공유할지 선택할 수 있다.

 

https://bumjae.tistory.com/1

 

Android Intent Filter (인텐트 필터)

인텐트 해석(Intent Resolving) - 인텐트 객체 내의 여러 정보들을 바탕으로 가장 적절한 컴포넌트를 찾는 과정이다. 인텐트 객체 정보와 각 컴포넌트 정보를 비교하게 되며, 이를 위해 각 컴포넌트는

bumjae.tistory.com

안드로이드 시스템 내부에선 수많은 앱들에 의해 수많은 인텐트들이 발생한다. 이 중 자신에게 필요한 인텐트만을 받기 위해 인텐트 필터가 있는 것이다. 인텐트 필터가 없다고 인텐트를 못 받는 건 아니다. 인텐트 필터는 인텐트 해석(인텐트 객체 안의 여러 정보들을 바탕으로 가장 적절한 컴포넌트를 찾는 과정)이 필요한 암시적 인텐트를 받을 때만 필요하고 호출 대상 컴포넌트가 명시돼 있는 명시적 인텐트는 인텐트 필터가 없어도 대상 컴포넌트를 호출할 수 있다.

 

https://stackoverflow.com/questions/3321514/what-are-intent-filters-in-android

 

What are intent-filters in Android?

In my android app, I wanted to start an activity 'B' from initial activity 'A'. I have created classes for both of these. However when using following code to start B, I get a runtime error: applic...

stackoverflow.com

인텐트 필터는 컴포넌트가 수신하려는 인텐트 유형을 지정하는 매니페스트 파일의 표현식이다. 암시적 인텐트를 만들면 안드로이드 시스템은 인텐트의 컨텐츠를 기기에 있는 다른 앱의 매니페스트에 선언된 인텐트 필터와 비교해서 시작할 적절한 컴포넌트를 찾는다. 인텐트가 인텐트 필터와 일치하면 시스템은 해당 컴포넌트를 시작하고 인텐트 객체를 전달한다.

 

어떤 컴포넌트(액티비티/프래그먼트, 서비스 등)를 호출할지 딱 적어놓는 명시적 인텐트는 이미 인텐트의 목적지가 정해져 있기 때문에 인텐트 필터가 필요없지만, 현재 내가 하려는 행동에 가장 적합한 앱이 뭔지 모르는데 쓰고 싶을 때 사용하는 게 인텐트 필터인 것 같다.

 

암시적 인텐트로 카메라 앱을 실행하도록 하면 호출하는 순간 내 핸드폰에 깔린 핸드폰 앱 중 하나를 선택할 수 있는 대화 상자가 표시된다. 난 그 중 내가 원하는 걸 선택해서 사용하기만 하면 된다.

만약 카메라 앱을 사용하려는데 전화부 앱이나 gmail 앱이 실행된다면? 사용자 입장으로선 이게 뭔가 할 것이다. 이 경우를 막기 위해 인텐트 필터가 있는 것 같다.

 

결론

 

  • 인텐트 필터는 암시적 인텐트 실행을 위해 필요한 요소다
  • 사용할 인텐트가 여러 종류면 그 개수만큼 인텐트 필터를 매니페스트에 만들어야 한다
반응형
Comments