728x90
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 |