<aside> 📎 Intent를 충족하는 어플리케이션이 무엇인지 지정한다. ex ) 새로운 activity 시작, 백그라운드에서 파일을 다운로드하기 위해 서비스 시작
</aside>
<aside> 📎 특정 컴포넌트의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 어플리케이션 컴포넌트가 이를 처리할 수 있도록 해준다. ex ) 지도에 있는 위치를 표시할 때 다른 앱이 지정한 위치를 지도에 표시하도록 요청하
</aside>
즉, 명시적 Intent는 특정 컴포넌트나 액티비티가 명확하게 실행되어야 할 경우,
암시적 Intent는 호출할 대상이 달라질 수 있는 경우에 사용한다.
<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>