[Android] 암시적 인텐트 활용하기

2021. 11. 3. 00:00·Android
Android Studio 4.2.2
Android SDK 28
Kotlin 1.5.21

 

 

암시적 인텐트

정의

암시적: 명확히 드러내지 않고 넌지시 알리는 (고려대 한국어대사전)

인텐트: 메시징 객체로, 다른 앱 구성 요소(activity, service, broadcast receiver, provider)에 작업을 요청하는데 사용 (android developer)

 

따라서 암시적 인텐트란, 앱 구성 요소에 작업을 요청하는데, 정확히 어떤 앱에 요청하는지 명확하게 정하지 않고 작업을 요청하는 인텐트이다.

예

다음과 같이 공유하기, 카메라 촬영, 링크 이동 등에서 친숙하게 보았을 것이다.

첫번째 스크린 샷인 공유하기를 보자면, 어느 앱을 사용하여 공유할지 명시적으로 정해지지 않고, 공유할 수 있는 앱 목록을 보여준 뒤 사용자가 선택하게끔 하고 있다.

 

활용

공유하기

val message = "공유하기 시 보낼 메시지 내용"

// 공유 인텐트
val shareIntent = Intent(Intent.ACTION_SEND)
    .setType("text/plain")
    .putExtra(Intent.EXTRA_TEXT, message)

// 선택 인텐트
val chooser = Intent.createChooser(shareIntent, "앱 선택 시 보이는 제목")

startActivity(chooser)

 

chooser의 "앱 선택 시 보이는 제목" 부분을 "포스트 공유하기"로 했을 때 아래와 같이 제목이 표시된다.

url(링크) 열기

// 1. 간단한 버전
val url = "웹페이지의 url"
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))

// 2. 잘못된 url에 대한 예외처리한 버전
try {
    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
} catch (e: ActivityNotFoundException) {
    Log.e(TAG, "url을 열 수 없음: ${e.stackTrace}")
}

열고자 하는 url이 잘못되어 url을 열기 위한 앱을 찾지 못하는 경우도 발생할 수 있다. 이 부분을 신경 쓸 필요가 없다면 1번을, 신경쓰고자 한다면 2번을 사용하면 된다.

 

 

 

위 코드는 모두 액티비티에서 작성된 것으로, 프래그먼트나 리사이클러뷰의 어댑터 등에서는 startActivity() 부분에서 에러가 날 수 있다.
이는 startActivity()가 Context 및 Activity 클래스의 메소드이기 때문이다. 따라서 context나 activity 객체를 매개변수 등의 방법으로 가져와 context.startActivity() 또는 activity.startActivity()로 수정해 사용하면 된다.

 

더 알아보기

위 활용 코드를 보면, Intent의 첫번째 인자로 어떤 값이 들어가는지에 따라 암시적 인텐트 성격이 달라짐을 알 수 있다.

그 외 암시적 인텐트로 할 수 있는 것들이 궁금하다면, 인텐트에 관한 안드로이드 공식문서를 보자.

728x90
저작자표시 비영리 변경금지 (새창열림)

'Android' 카테고리의 다른 글

[Android] 직접 만든 안드로이드 프로젝트 템플릿  (0) 2021.11.18
[Android] 권한 확인 및 요청  (0) 2021.11.15
[Android] 액티비티 화면전환 애니메이션  (0) 2021.11.12
[Android] 툴바(앱바) 사용하기  (0) 2021.11.09
[Android] 알림 띄우기 (Notification)  (0) 2021.11.06
'Android' 카테고리의 다른 글
  • [Android] 권한 확인 및 요청
  • [Android] 액티비티 화면전환 애니메이션
  • [Android] 툴바(앱바) 사용하기
  • [Android] 알림 띄우기 (Notification)
Wintinue
Wintinue
201 Created!
  • Wintinue
    Win Record
    Wintinue
    • 📘 Post (68)
      • Android (32)
      • Nest.js (1)
      • NGINX (1)
      • Error (10)
      • AWS (1)
      • Git (3)
      • IT용어 (4)
      • CMD (2)
      • Language (5)
        • PHP (3)
        • Java (2)
      • Project (5)
        • 개인 프로젝트 (3)
        • 팀 프로젝트 (2)
  • 링크

    • Github
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Wintinue
[Android] 암시적 인텐트 활용하기
상단으로

티스토리툴바