명시적 Intent

<aside> 📎 Intent를 충족하는 어플리케이션이 무엇인지 지정한다. ex ) 새로운 activity 시작, 백그라운드에서 파일을 다운로드하기 위해 서비스 시작

</aside>

암시적 Intent

<aside> 📎 특정 컴포넌트의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 어플리케이션 컴포넌트가 이를 처리할 수 있도록 해준다. ex ) 지도에 있는 위치를 표시할 때 다른 앱이 지정한 위치를 지도에 표시하도록 요청하

</aside>

즉, 명시적 Intent는 특정 컴포넌트나 액티비티가 명확하게 실행되어야 할 경우,

암시적 Intent는 호출할 대상이 달라질 수 있는 경우에 사용한다.

<intent-filter>

<aside> 📎 Intent의 작업, 데이터 및 카테고리를 기반으로 어느 유형의 Intent를 수락하는지 지정한다.

</aside>

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>