본문 바로가기
android

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

by 윈 Win 2022. 6. 26.
728x90

 

블로그 이사했습니다!

 

👇 블로그 이전 공지 👇

블로그 이전 안내 (tistory.com)

 

 

 

👇 새 블로그에서 글 보기 👇

https://win-record.tistory.com/1

 

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

Android Studio 4.2.2 Android SDK 28 Kotlin 1.5.21 암시적 인텐트 정의 암시적: 명확히 드러내지 않고 넌지시 알리는 (고려대 한국어대사전) 인텐트: 메시징 객체로, 다른 앱 구성 요소(activity, service, broa..

win-record.tistory.com

 


 

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의 첫번째 인자로 어떤 값이 들어가는지에 따라 암시적 인텐트 성격이 달라짐을 알 수 있다.

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

댓글