Android Studio/App Components

Implicit Intent

shDev 2026. 3. 2. 20:42

 

🔷 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 발생

🔷 ⭐ 핵심 포인트

  1. Implicit Intent = Action 기반 — 목적지가 아닌 "무엇을 할지"만 명시하면 시스템이 알아서 처리한다.
  2. URI는 리소스 주소 — 웹 URL뿐 아니라 전화번호, 위치 좌표 등 다양한 리소스를 표현할 수 있다.
  3. ACTION_VIEW는 가장 범용적인 Action — Uri 타입에 따라 시스템이 적절한 앱을 자동 선택한다.
  4. 앱이 없을 경우를 대비해 예외 처리를 반드시 추가하자. ← 실무 필수!
// 안전한 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