Intent

2025. 3. 30. 03:04·학습 기록/안드로이드
반응형

Intent란?

= 컴포넌트 간 통신을 맡는 객체

  • 액티비티(Activity): 화면을 구성하는 컴포넌트
  • 서비스(Service): 백그라운드 작업을 하는 컴포넌트
  • 콘텐츠 프로바이더(Content Provider): 데이터를 공유하는 컴포넌트
  • 브로드캐스트 리시버(Broadcast Receiver): 시스템 이벤트가 발생할 때 실행되게 하는 컴포넌트

안드로이드 앱은 위 4개의 컴포넌트로 개발하는데 이때 Intent는 컴포넌트를 실행하기 위해 시스템에 전달하는 메세지라고 볼 수 있다.

 

즉 컴포넌트를 실행하는 정보가 담긴 인텐트 객체를 시스템에 전달하면 컴포넌트가 실행된다.


Intent의 종류

명시적 인텐트

  • 클래스 타입 레퍼런스를 이용하는 것
  • 내부 앱의 컴포넌트를 요청하는 인텐트 객체를 만들 때 사용
  • 액티비티 간 화면 이동을 구현할 때 흔히 볼 수 있음
val intent = Intent(this, DetailActivity::class.java)

암시적 인텐트

  • 인텐트 필터 정보를 활용한 인텐트
  • 실행 대상을 시스템이 판단
  • 외부 앱의 컴포넌트를 요청할 때 사용
val intent = Intent()
intent.data = Uri.parse("https://backcii.tistory.com")

* 인텐트 필터(Intent Filter)

  • 컴포넌트가 수신하고자 하는 Intent의 유형을 정의
  • 예시
    • 앱A는 갤러리 기능을 제공하고 있고, 앱B에서는 이 기능을 사용하고 싶어할 때
    • 앱A에서 갤러리에 대한 인텐트 필터를 선언하고 있어야 시스템은 앱 A가 B에서 요청한 인텐트를 처리 가능하다고 판단함
//앱 A의 AndroidManifest.xml 예시
<activity android:name=".GalleryActivity">
    <intent-filter>
        <action android:name="android.intent.action.PICK" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

이때 인텐트 필터 하위에 선언엔 태그는 다음과 같은 역할을 한다.

  • `<action>` : 컴포넌트의 기능을 나타냄
  • `<category>` : 컴포넌트가 포함되는 범주
    • DEFAULT: 암시적 인텐트를 위해 필수
    • LAUNCHER: 앱 아이콘 클릭시 시작되는 컴포넌트
    • BROWSABLE: 브라우저가 실행하는 컴포넌트
  • `<data>` : 컴포넌트에 필요한 데이터 정보
    • 즉 컴포넌트에서 데이터 형식을 처리하는지 나타냄
//앱B에서 갤러리 호출
val intent = Intent(Intent.ACTION.PICK)
intent.type = "image/*"
startActivity(intent)

액티비티 간 화면 전환 + 데이터

MainActivity -> DetailActivity 로 화면을 전환하며 데이터를 함께 전달하고 싶을 때

putExtra (MainActivity.kt)

//DetailActivity를 실행하라는 정보를 Intent 객체에 대입
val intent = Intent(this, DetailActivity::class.java)

//전달하고자 하는 데이터 추가
intent.putExtra("name", "honggildong")

//인텐트를 시스템에 전달
startActivity(intent)
  • `putExtra()` : 엑스트라 데이터를 추가하는 함수
    • `public Intent putExtra(String name, CharSequence value)`
    • 첫 번째 매개변수 = 데이터 식별자
    • 두 번째 매개변수 = 전달할 데이터

getExtra (DetailActivity.kt)

val name = intent.getStringExtra("name")
  • 위와 같이 인텐트로 실행된 컴포넌트에서 엑스트라 데이터를 가져올 수 있다.
  • `getStringExtra()`, `getIntExtra()`, `getDoubleExtra()` 등으로 타입별 데이터를 가져올 수 있음
반응형

'학습 기록 > 안드로이드' 카테고리의 다른 글

Recycler View  (0) 2025.03.29
Fragment  (0) 2025.03.24
ViewBinding  (0) 2025.03.23
'학습 기록/안드로이드' 카테고리의 다른 글
  • Recycler View
  • Fragment
  • ViewBinding
BaekCCI
BaekCCI
  • BaekCCI
    BaekLog
    BaekCCI
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 학습 기록
        • 안드로이드
        • 문제풀이
        • kotlin
      • 우아한 테크코스
      • 백씨의 하루
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    우아한테크코스
    백준
    코틀린
    Algorithm
    우테코
    Java
    소프티어
    Android
    알고리즘
    프로그래머스
    gdg korea
    softeer
    Kotlin
    androiddeveloper
    i/o extended android
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.6
BaekCCI
Intent
상단으로

티스토리툴바