[Android] Intent

June·2023년 7월 6일
0

Intent

  • Intent는 앱 컴포넌트간에 메시지를 전달하고 작업을 수행하기 위해 사용되는 객체
  • Intent는 앱 내부에서 다른 액티비티, 서비스, 브로드캐스트 리시버 등과 통신하는 데 사용
  • Intent를 사용하여 다른 앱의 컴포넌트와 상호 작용
  • Intent의 두 가지 종류인 명시적 인텐트(Explicit Intent)암시적 인텐트(Implicit Intent)

명시적 Intent

명시적 Intent는 명확하게 대상 컴포넌트를 지정하여 사용하는 Intent로 시작할 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버)를 직접 지정하여 명시적으로 목적지를 설정한다.
명시적 Intent를 사용하면 목표 컴포넌트가 명확하게 정의되기 때문에 앱 내의 다른 컴포넌트나 외부 앱의 컴포넌트와도 구분할 수 있다. 또한, 명시적 Intent를 사용하면 컴포넌트 간에 직접적인 통신이 가능해진다.

// context는 액티비티, 서비스 또는 애플리케이션의 컨텍스트
// TargetActivity::class.java는 시작할 대상 액티비티의 클래스를 지정
val intent = Intent(context, TargetActivity::class.java)
startActivity(intent)

startActivity() 메서드를 호출하여 명시적 Intent를 사용하여 TargetActivity를 시작


암시적 Intent

암시적 Intent는 명확한 대상 컴포넌트를 지정하지 않고, 앱 내부나 외부의 다양한 컴포넌트와 상호 작용하기 위해 사용되는 Intent다. 액션(action) 또는 카테고리(category) 등의 정보를 포함하여 어떤 작업을 수행할 것인지 암시적으로 지정한다. 시스템은 암시적 Intent를 수신하여 알맞은 대상 컴포넌트를 찾아 작업을 수행한다.

// 암시적 Intent를 사용하여 웹사이트를 열어보는 예시 코드

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.example.com"))
startActivity(intent)

startActivity() 메서드를 호출하여 암시적 Intent를 사용하여 웹사이트를 연다.


데이터 전달

데이터를 전달하기 위해서는 putExtra() 메서드를 사용하여 Intent에 데이터를 첨부해야 한다. 데이터는 키-값 쌍으로 전달되며, 수신측에서는 해당 를 사용하여 값을 추출할 수 있다.

val intent = Intent(this, TargetActivity::class.java)

// 문자열 데이터 전달
intent.putExtra("keyString", "Hello, World!")
// 숫자 데이터 전달
intent.putExtra("keyInt", 42)
// 객체 데이터 전달
val person = Person("John", 25)
intent.putExtra("keyperson", person)

startActivity(intent)

수신측에서는 getExtra() 메서드를 통해 첨부된 데이터를 추출한다.
데이터를 전달할 때 첨부된 데이터의 유형과 동일한 메서드를 사용하여 데이터를 추출해야 한다.
첨부된 데이터가 없거나 추출에 실패할 경우에는 기본값을 사용할 수 있다.

// 문자열 데이터 받기
val data = intent.getStringExtra("keyString")

// 숫자 데이터 받기
// defaultValue는 추출에 실패했을 경우 사용할 기본값
val data = intent.getIntExtra("keyInt", defaultValue)

// 객체 데이터 받기
val data = intent.getParcelableExtra<Person>("keyperson")
profile
끝까지 해보자

0개의 댓글