우선 저번 포스팅에서 인텐트에 대해 알아보았다.
이번에 알아볼 것은 인텐트 필터인데 이 친구는 저번에 알아본 인텐트 중 명시적 인텐트가 아닌 암시적 인텐트에 사용되는 친구이다.
만약 인텐트를 모른다면 전 포스팅을 보고오자.
명시적 인텐트에 사용되지 않는 이유는 단순하게,
명시적 인텐트는 항상 자신의 대상에게 전달되며, 이는 구성 요소가 어떤 인텐트 필터를 선언하든 무관하기 때문이다
인텐트 필터
인텐트 필터는 자신에게 필요한 인텐트만을 받기 위해 만들어진 것이다.
그 이유가 우리가 우리 앱에서 다른 앱을 실행시킬 때, 다른 사람이 만든 앱의 액티비티 명을 알기는 힘들기 때문이다.
사용법
우선 인텐트 필터는 매니페스트에서 <intent-filter>라는 요소를 사용해 선언을 한다.
또한 여러 인텐트를 처리하려면 여러 번 선언을 해 주어야 한다.
그리고 이런 인텐트 필터에는 속성이 있다.
- <action>
- <data>
- <category>
이렇게 3가지가 있는데 각각 특징들을 설명해 주겠다.
action 필터
인텐트 객체 내의 action을 검사하여 인텐트 필터에 정의된 액션과 일치하는지 여부를 검사하는 필터이다.
이게 무슨 뜻이냐
만약 action필터에서 android.intent.action.VIEW인데 인텐트에 정의된 액션이 Intent.ACTION.EDIT이라면 통과하지 못한다는 것이다.
즉 action필터에 정의된 액션과 인텐트에 정의된 액션이 같아야 한다는 점이다.
단, 인텐트에 액션이 아예 정의되어있지 않은 경우에는 액션 필터를 통과가 가능하다.
category 필터
인텐트 객체 내의 category 항목을 검사하여 인텐트 필터에 정의된 카테고리와 일치하는지 여부를 검사하는 필터이다.
action 필터에서는 인텐트 객체 내에 아예 액션이 정의되어있지 않은 경우 액션 검사를 통과할 수 있었던 것에 반해
category 필터는 인텐트 객체에 정의된 카테고리가 인텐트 필터에 정의된 카테고리들과 일치해야 한다.
게다가 category를 특별히 추가해주지 않은 인텐트를 받을 수 있게 하려면 카테고리 필터에 android.intent.category.DEFAULT android.intent.category.DEFAULT를 추가해줘야 한다.
안 그러면 어떠한 암시적 인텐트도 받지 못한다.
data 필터
인텐트 객체 내의 data 항목 및 type을 검사하여 인텐트 필터에 정의된 값과 비교하여 일치 여부를 검사하는 필터이다.
데이터 검사는 데이터의 주소(URI)를 검사하는 부분과 데이터의 유형(type, MIME type)을 검사하는 부분으로 나누게 된다.
정리
정리하자면 내가 사용하고 싶은 앱이 명확하지 않다면 사용하는 것이 인텐트 필터이다.
저번에 말했던 url을 여는데 구글으로 열꺼냐 네이버로 열꺼냐 하면서 창이 뜨던 거 말이다.
url을 눌렀는데 갑자기 메시지가 켜진다거나, 전화가 켜진다거나 하는 것을 막기 위해 있는 것 같다.
'안드로이드' 카테고리의 다른 글
[안드로이드] 클린 아키텍처 정리 (0) | 2022.05.24 |
---|---|
[안드로이드] LiveData 좀 더 자세히 알아보기 (0) | 2022.05.02 |
[안드로이드] 인텐트 알아보기 (0) | 2022.04.28 |
[안드로이드/Kotlin] MVVM응용 - 번호 뽑기 만들기 (0) | 2022.03.18 |
[안드로이드] 라이브 데이터 + 데이터 바인딩 알아보기(LiveData + DataBinding) (0) | 2022.03.11 |