Intent 및 Intent Filter 정리

임찬형·2022년 2월 3일

Android 기본

목록 보기
1/7

Intent란?

  • 특정 컴포넌트에 대한 실행정보를 넣어 실행하며 원하는 데이터를 전달 가능

1. 명시적 인텐트

  • 실행할 액티비티 컴포넌트를 정확히 명시 (액티비티, 서비스, 리시버 등)
    ex) com.ich.xxactivity 라는 액티비티를 명시해 실행함

    +) 단, 실행을 원하는 액티비티는 manifest에서 exported속성이 true로 설정되어야 함)

2. 암시적 인텐트

  • 어떤 컴포넌트를 실행할 것인지 의도만 전달함
    ex) 웹 링크를 클릭하면 브라우저를 실행하고자 하는 의도를 전달 - 사용 가능한 브라우저 목록이 등장
	암시적 인텐트 처리 과정
    
    인텐트 전송 - 액티비티 매니저 - 패키지 매니저 - 사용 가능한 패키지 검색 - 
    설치된 패키지 정보 검색 후 액티비티 매니저에게 전달 - 실행

암시적 인텐트의 정보

  1. 액션 : 동작을 설명하는 문자열 (이 앱은 이 동작과 관련이 있다)
    ex) 보여주기(VIEW), 전화걸기(DIAL) 등

  2. 카테고리: 액티비티의 분류 (이 앱은 해당 카테고리에 속한다)
    ex) 웹 브라우저(BROWSABLE), 계산기(APP_CALCULATOR)

    + DEFAULT 카테고리: 암시적 컴포넌트로 명시함 (실행 가능한 앱 목록에 등장 가능)

  3. 데이터 위치: 실행될 컴포넌트가 필요로 하는 데이터 위치 정보 (Uri로 표현)
    ex) 뮤직 플레이어 앱에서 음악 선택 - 선택한 음악 파일 위치를 플레이어 액티비티에 전달 - 플레이어에서 위치를 통해 파일 찾아 실행

    + 데이터를 직접 보내지 않고 위치정보만 전송해 효율적

  4. 데이터 타입: 3번에서 명시한 데이터의 타입을 설정
    ex) 선택한 음악 파일의 타입 명시 mimeType="audio/mpeg"

Intent Filter 란?

  • 앱에 Intent가 전달되었을 때 Intent Filter에 기술된 조건에 맞는 Intent만 통과시킴 (말 그대로 필터링)

  • Manifest에서 activity 내부에 선언하며, 해당 activity가 어떤 동작인지, 어떤 카테고리인지 명시하여 일치하는 암시적 인텐트를 받을 수 있도록 함

ex) A 앱에서 Intent에 ACTION_VIEW, CATEGORY_BROWSABLE를 설정한 후 전송하면?

- 암시적 인텐트이므로 CATEGORY_DEFAULT가 자동 추가된 후 전송

- 설치된 앱들 중 Intent Filter에 ACTION_VIEW, CATEGORY_BROWSABLE,
  CATEGORY_DEFAULT가 정의된 앱들의 목록이 등장함 
  (해당 앱들의 Filter가 Intent를 통과시킴)
  
- 목록에서 앱을 선택하면 해당 앱으로 Intent 전달하며 컴포넌트를 실행함

(코드 예시)

[A 앱]  // 웹 사이트를 열기 위한 인텐트를 전송
val intent = Intent().apply {
	action = Intent.ACTION_VIEW
    data = Uri.parse("https://www.google.com")
}
context.startActivity(intent)


[B 앱 Manifest] // A앱이 보낸 intent의 액션 및 카테고리가 일치하여 통과
...
<activity
	android:name="com.ich.BActivity">
	<intent-filter>
    	<action android:name="action.ACTION_VIEW/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
</activity>

B 앱에서 A 앱의 암시적 인텐트를 통과시켜 받았으므로, B 앱에서는 해당 인텐트의 data (google 주소)를 받아 웹을 띄워 줄 수 있다

0개의 댓글