명시적 인텐트
명시적 인텐트는 인텐트를 충족하는 애플리케이션이 무엇인지 지정합니다.
이를 위해 대상 앱의 패키지 이름 또는 완전히 자격을 갖춘 구성 요소 클래스 이름을 제공합니다.
명시적 인텐트는 일반적으로 앱 안에서 구성 요소를 시작할 때 씁니다.
시작하고자 하는 액티비티 또는 서비스의 클래스 이름을 알고 있기 때문입니다.
예를 들어, 사용자 작업에 응답하여 새로운 액티비티를 시작하거나 백그라운드에서 파일을 다운로드하기 위해 서비스를 시작하는 것 등이 여기에 해당됩니다.
// 액티비티
val intent = Intent(this, InputActivity::class.java)
startActivity(intent)
// 서비스
val downloadIntent = Intent(this, DownloadService::class.java).apply {
data = Uri.parse(fileUrl)
}
startService(downloadIntent)
암시적 인텐트
암시적 인텐트는 특정 구성 요소의 이름을 대지 않지만, 그 대신 수행할 일반적인 작업을 선언하여 다른 앱의 구성 요소가 이를 처리할 수 있도록 해줍니다.
예를 들어 사용자에게 지도에 있는 한 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 해당 기능을 갖춘 다른 앱이 지정된 위치를 지도에 표시하도록 요청할 수 있습니다.
- ACTION_VIEW : 액티비티가 사용자에게 표시할 수 있는 어떤 정보를 가지고 있을 때 사용 (갤러리 앱에서 볼 사진이나 지도 앱에서 볼 주소 등)
- ACTION_SEND : 사용자가 다른 앱을 통해 공유할 수 있는 데이터를 가지고 있을 때 사용 (이메일 앱 또는 소셜 공유 앱 등)
// 전화 기능으로 연결
with(Intent(Intent.ACTION_VIEW)) {
data = Uri.parse("tel:$phoneNumber")
startActivity(this)
}
// 문자 기능으로 연결
val sendIntent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, textMessage)
type = "text/plain"
}
// 인텐트를 처리할 수 있는 앱이 최소한 하나는 있는지 확인
if (sendIntent.resolveActivity(packageManager) != null) {
startActivity(sendIntent)
}
728x90
반응형
'안드로이드 > 개념' 카테고리의 다른 글
[Android] Serializable vs Parcelable (0) | 2023.07.21 |
---|---|
[Android] Timer와 Thread (0) | 2023.07.18 |
[Android] Activity 상태 변경 처리 (0) | 2023.07.16 |
[Android] Android의 이해 (0) | 2023.07.15 |
[Android] Kotlin의 이해 (0) | 2023.07.15 |