🔷 Implicit Intent란?
목적지 컴포넌트를 직접 지정하지 않고, 수행할 작업(Action)만 명시하면 Android 시스템이 적절한 앱/컴포넌트를 자동으로 찾아서 실행해주는 Intent.
내 앱 ──[Action 요청]──▶ Android 시스템 ──▶ 적합한 앱 자동 선택
(브라우저, 지도, 카메라 등)
🔷 Explicit vs Implicit 비교 복습
구분 Explicit Implicit
| 목적지 | 클래스명 직접 지정 | Action만 지정 |
| 사용처 | 같은 앱 내 이동 | 외부 앱 기능 호출 |
| 예시 | A화면 → B화면 | 브라우저 열기, 전화 걸기 |
🔷 핵심 개념: URI와 ACTION_VIEW
URI (Uniform Resource Identifier)
- 리소스를 식별하는 표준화된 문자열
- URL, 파일 경로, 콘텐츠 등을 나타낼 때 사용
- Uri.parse("https://www.google.com") 형태로 생성
Intent.ACTION_VIEW
- "이 리소스를 보여줘" 라는 의미의 미리 정의된 상수
- Uri의 종류에 따라 시스템이 적절한 앱을 자동 선택
Uri 종류 시스템이 선택하는 앱
| https://... | 웹 브라우저 |
| tel:010-1234-5678 | 전화 앱 |
| geo:37.5,127.0 | 지도 앱 |
| content://... | 이미지 뷰어 등 |
🔷 사용법 — 웹 페이지 열기 예시
// 웹 페이지 열기
fun openWebPage() {
val webPage = Uri.parse("https://www.google.com")
val intent = Intent(Intent.ACTION_VIEW, webPage)
startActivity(intent)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn = findViewById(R.id.open_browser_btn)
btn.setOnClickListener {
openWebPage()
}
}
💡 Explicit Intent와 달리 두 번째 파라미터로 클래스가 아닌 Uri를 전달한다.
🔷 다양한 Implicit Intent 활용 예시
// 전화 걸기
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:010-1234-5678"))
startActivity(intent)
// 문자 보내기
val intent = Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:010-1234-5678"))
intent.putExtra("sms_body", "안녕하세요!")
startActivity(intent)
// 지도 열기
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.5665,126.9780"))
startActivity(intent)
// 사진 촬영
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivity(intent)
🔷 Implicit Intent 동작 원리
1. 앱이 Action + Uri로 Intent 생성
↓
2. Android 시스템이 Intent Filter를 검색
↓
3. 해당 Action을 처리할 수 있는 앱 탐색
↓
4-A. 앱이 하나면 → 바로 실행
4-B. 앱이 여러 개면 → 선택 다이얼로그 표시
4-C. 앱이 없으면 → ActivityNotFoundException 발생
🔷 ⭐ 핵심 포인트
- Implicit Intent = Action 기반 — 목적지가 아닌 "무엇을 할지"만 명시하면 시스템이 알아서 처리한다.
- URI는 리소스 주소 — 웹 URL뿐 아니라 전화번호, 위치 좌표 등 다양한 리소스를 표현할 수 있다.
- ACTION_VIEW는 가장 범용적인 Action — Uri 타입에 따라 시스템이 적절한 앱을 자동 선택한다.
- 앱이 없을 경우를 대비해 예외 처리를 반드시 추가하자. ← 실무 필수!
// 안전한 Implicit Intent 호출 (심화)
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com"))
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
} else {
// 처리할 앱이 없을 때 대비
Toast.makeText(this, "브라우저 앱이 없습니다.", Toast.LENGTH_SHORT).show()
}
'Android Studio > App Components' 카테고리의 다른 글
| 예제 (0) | 2026.03.02 |
|---|---|
| Android Manifest (0) | 2026.03.02 |
| Explicit Intent (0) | 2026.03.02 |
| Android Activity Lifecycle (0) | 2026.03.02 |