Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 안드로이드 os 구조
- 클래스
- rxjava cold observable
- 큐 자바 코드
- Rxjava Observable
- 플러터 설치 2022
- 안드로이드 유닛 테스트 예시
- 안드로이드 유닛테스트란
- 안드로이드 라이선스 종류
- 안드로이드 레트로핏 사용법
- 서비스 쓰레드 차이
- ANR이란
- 자바 다형성
- 스택 자바 코드
- jvm 작동 원리
- ar vr 차이
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트
- 멤버변수
- 객체
- 안드로이드 라이선스
- rxjava disposable
- android ar 개발
- 안드로이드 레트로핏 crud
- 2022 플러터 설치
- 스택 큐 차이
- rxjava hot observable
- jvm이란
- android retrofit login
- 2022 플러터 안드로이드 스튜디오
Archives
- Today
- Total
나만을 위한 블로그
[Android] 인텐트 필터란? 본문
728x90
반응형
안드로이드 디벨로퍼에선 인텐트 필터를 이렇게 말하고 있다.
https://developer.android.com/guide/components/intents-filters?hl=ko
인텐트 필터는 인텐트의 작업, 데이터 및 카테고리를 기반으로 어느 유형의 인텐트를 수락하는지 지정한다. 시스템은 인텐트가 인텐트 필터 중 하나를 통과한 경우에만 암시적 인텐트를 앱 구성 요소에 전달한다.
참고) 명시적 인텐트는 항상 자신의 대상에게 전달되며, 이는 구성 요소가 어떤 인텐트 필터를 선언하든 무관하다.
각 인텐트 필터는 앱의 매니페스트에 있는 <intent-filter> 요소에서 정의하고, 이는 대응되는 앱 구성 요소에서 중첩된다.
참고) 암시적 인텐트를 수신하려면 CATEGORY_DEFAULT 카테고리를 인텐트 필터에 포함해야 한다. 이 카테고리를 인텐트 필터에서 선언하지 않으면 액티비티에 어떤 암시적 인텐트도 확인되지 않는다.
여러 가지 종류의 인텐트를 처리하고자 하되 특정 조합의 작업, 데이터, 카테고리 유형으로만 한정하고자 할 때는 여러 인텐트 필터를 생성해야 한다.
명시적 인텐트보단 암시적 인텐트를 사용할 때 사용되며, 매니페스트에서 <intent-filter> 태그를 만들어 사용한다.
여러 인텐트를 처리하려면 그만큼 인텐트 필터를 생성해야 한다. 그 외에는 대략적인 사용법과 주의점 등이 써 있어서 생략했다.
하지만 이걸 봐선 인텐트 필터가 뭔지 모르겠다. 다른 글들을 참고해봤다.
https://www.charlezz.com/?p=859
암시적 인텐트를 통해 사용자가 어느 앱을 사용할지 선택하도록 할 때 인텐트 필터가 필요하다. 사용자가 다른 사람들과 공유하고 싶은 컨텐츠를 가진 경우 ACTION_SEND라는 Action이 있는 인텐트를 만든 다음, 공유할 컨텐츠를 지정하는 Extra를 추가하면 된다. 해당 인텐트로 startActivity()를 호출하면, 사용자가 어느 앱을 통해 컨텐츠를 공유할지 선택할 수 있다.
안드로이드 시스템 내부에선 수많은 앱들에 의해 수많은 인텐트들이 발생한다. 이 중 자신에게 필요한 인텐트만을 받기 위해 인텐트 필터가 있는 것이다. 인텐트 필터가 없다고 인텐트를 못 받는 건 아니다. 인텐트 필터는 인텐트 해석(인텐트 객체 안의 여러 정보들을 바탕으로 가장 적절한 컴포넌트를 찾는 과정)이 필요한 암시적 인텐트를 받을 때만 필요하고 호출 대상 컴포넌트가 명시돼 있는 명시적 인텐트는 인텐트 필터가 없어도 대상 컴포넌트를 호출할 수 있다.
https://stackoverflow.com/questions/3321514/what-are-intent-filters-in-android
인텐트 필터는 컴포넌트가 수신하려는 인텐트 유형을 지정하는 매니페스트 파일의 표현식이다. 암시적 인텐트를 만들면 안드로이드 시스템은 인텐트의 컨텐츠를 기기에 있는 다른 앱의 매니페스트에 선언된 인텐트 필터와 비교해서 시작할 적절한 컴포넌트를 찾는다. 인텐트가 인텐트 필터와 일치하면 시스템은 해당 컴포넌트를 시작하고 인텐트 객체를 전달한다.
어떤 컴포넌트(액티비티/프래그먼트, 서비스 등)를 호출할지 딱 적어놓는 명시적 인텐트는 이미 인텐트의 목적지가 정해져 있기 때문에 인텐트 필터가 필요없지만, 현재 내가 하려는 행동에 가장 적합한 앱이 뭔지 모르는데 쓰고 싶을 때 사용하는 게 인텐트 필터인 것 같다.
암시적 인텐트로 카메라 앱을 실행하도록 하면 호출하는 순간 내 핸드폰에 깔린 핸드폰 앱 중 하나를 선택할 수 있는 대화 상자가 표시된다. 난 그 중 내가 원하는 걸 선택해서 사용하기만 하면 된다.
만약 카메라 앱을 사용하려는데 전화부 앱이나 gmail 앱이 실행된다면? 사용자 입장으로선 이게 뭔가 할 것이다. 이 경우를 막기 위해 인텐트 필터가 있는 것 같다.
결론
- 인텐트 필터는 암시적 인텐트 실행을 위해 필요한 요소다
- 사용할 인텐트가 여러 종류면 그 개수만큼 인텐트 필터를 매니페스트에 만들어야 한다
반응형
'Android' 카테고리의 다른 글
[Android] 뷰모델이란? + 뷰모델 코틀린 예제 (0) | 2021.10.04 |
---|---|
[Android] 서비스란? (0) | 2021.10.01 |
[Android] 플레이 스토어 앱 등록 시 failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: Password is not ASCII 에러 해결 (0) | 2021.09.28 |
[Android] java.lang.RuntimeException: Cannot create an instance of class viewmodel 에러 해결 (0) | 2021.09.20 |
[Android] Application 클래스란? (0) | 2021.09.18 |
Comments