728x90
블로그 이사했습니다!
👇 블로그 이전 공지 👇
👇 새 블로그에서 글 보기 👇
https://win-record.tistory.com/1
Android Studio 4.2.2Android SDK 28Kotlin 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의 첫번째 인자로 어떤 값이 들어가는지에 따라 암시적 인텐트 성격이 달라짐을 알 수 있다.
그 외 암시적 인텐트로 할 수 있는 것들이 궁금하다면, 인텐트에 관한 안드로이드 공식문서를 보자.
'android' 카테고리의 다른 글
[error]Facebook log-in:Manifest merger failed (0) | 2021.01.25 |
---|---|
[error]Cloud FireStore: documentSnapshot.toObject() error (0) | 2021.01.25 |
Thread - 텍스트 변경하기 (0) | 2021.01.22 |
Thread - 이미지 바꾸기 (0) | 2021.01.22 |
Thread - 화면 변경하기(초시계) (0) | 2021.01.22 |
댓글