Android - 인텐트(Intent)

2024. 6. 20. 15:03Android 앱 개발

# 인텐트의 개념

- 개념: 일종의 메시지 객체로, 다른 앱 구성요소(액티비티, 서비스, 브로드캐스트 리시버)로 작업을 요청하는 기능 수행

 

# 인텐트의 유형

1) 명시적 인텐트(Explicit Intent)

- 특정한 컴포넌트를 직접적으로 호출

- 인텐트 객체에 시작하고자 하는 구성 요소의 이름을 명확하게 설정하고 startActivity() 또는 startService() 메소드를 통해 해당 컴포넌트를 실행

- 주로 앱 내부에서 다른 액티비티나 서비스를 시작할 때 사용(메인 액티비티에서 사용자 입력을 받아 세부 정보를 표시하는 새로운 액티비티를 띄울 때 등)

 

2) 암시적 인텐트(Implicit Intent)

- 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정해 startActivity() 메소드에 넘김

- 안드로이드 시스템은 이 인텐트를 처리할 수 있는 모든 앱을 검색해 적합한 인텐트 필터를 가진 컴포넌트를 찾아 실행

  ※ 인텐트 필터: 특정 인텐트에 반응하는 액티비티, 서비스, 브로드캐스트 리시버의 능력을 정의 / 어떤 인텐트를 수신할 준비가 되어 있는지를 나타내는 설정

- 주로 다은 앱의 컴포넌트를 실행시킬 때 사용(사용자가 지도 보기를 요청할 때 해당 작업을 처리할 수 있는 모든 앱 - 카카오맵, 구글맵, 네이버지도 등 - 중 사용자가 선택할 수 있도록 앱 목록을 제공)

 

# 인텐트의 객체

1) 컴포넌트 이름

- 타겟 컴포넌트의 이름을 명시해 인텐트가 전달될 정확한 대상을 지정

- 컴포넌트 이름이 없으면 명시적 인텐트가 아닌 암시적 인텐트로 처리됨

- new Intent(context, TargetActivity.class)에서 TargetActivity.class가 컴포넌트 이름

 

2) 액션

- 인텐트가 수행해야 할 일반적인 작업을 정의

- Ex) Intent.ACTION_VIEW: 사용자에게 데이터를 보여줌

 

3) 데이터

- 작업을 수행하는 데 필요한 데이터의 URI를 지정

- 데이터는 보통 Uri 객체로 액션과 결합하여 사용

- Ex) Uri.parse("tel:12345") : 전화 앱에 전화번호 데이터를 제공

 

4) 카테고리

- 인텐트의 유형을 더 구체적으로 지정, 어떤 컴포넌트가 처리할 수 있는지 알려줌

- Ex) Intent.CATEGORY_HOME: 홈 화면 어플리케이션을 시작할 때 사용

 

5) 엑스트라

- 복잡한 데이터를 인텐트에 전달하기 위한 키-값의 쌍 형태 추가 정보

- 기본 타입부터 Serializable 객체까지 다양한 데이터를 전달 가능

- Ex) intent.putExtra("extra_key", "value")

 

# 명시적 인텐트로 다른 액티비티 시작하기

// 현재 액티비티에서 AnotherActivity를 시작하기 위한 명시적 인텐트 생성
val intent = Intent(this, AnotherActivity::class.java)

// 인텐트에 데이터 추가 (옵션)
intent.putExtra("key", "value")

// AnotherActivity 시작
startActivity(intent)

 

1) 인텐트 생성(첫번째 줄)

- Intent 클래스의 인스턴스를 생성

- 첫 번째 매개변수로는 현재 컨텍스트(this)를, 두 번째 매개변수로는 시작하려는 액티비티의 Class 객체를 전달

 

2) 데이터 전달(두번째 줄, 선택 사항)

- putExtra 메소드를 사용해 인텐트에 추가 데이터를 삽입할 수 있음

- 시작될 액티비티에서 이 데이터를 사용 가능

 

3) 액티비티 시작(마지막 줄)

- startActicity() 메소드를 호출해 인텐트를 사용

- 이 호출이 실행되면 안드로이드 시스템은 명시된 인텐트를 따라 다른 액티비티를 시작

 

# 암시적 인텐트로 다른 액티비티 시작하기

- 암시적 인텐트로 다른 액티비티를 시작하려면 인텐트 안에 작업과 데이터를 지정해야 함

 

# 암시적 인텐트 수신(인텐트 필터)

- 본인의 앱이 수신할 수 있는 암시적 인텐트가 무엇인지 알리려면 각 앱 구성 요소에 대한 하나 이상의 인텐트 필터를 <intent-filter> 요소로 매니페스트 파일에 선언해야 함

- 각 인텐트 필터가 작업, 데이터, 카테고리를 근거로 어느 유형의 인텐트를 수신할지 결정함

 

 

# 액티비티 간 데이터 전달

- 인텐트에 컴포넌트 실행을 요청할 때 데이터를 함께 전달하려면 엑스트라 데이터를 이용함

- Extras를 활용해 이름과 값의 쌍으로 된 부가 정보를 전달

 

* Extras에 값을 저장하는 메소드

- Intent putExtra(String name, int value)

- Intent putExtra(String name, String value)

- Intent putExtra(String name, boolean value)

 

* Extras에 저장된 값을 읽는 메소드

- int getIntExtra(String name, int defaultValue)

- String getStringExtra(String name)

- boolean getBooleanExtra(String name, boolean defaultValue)

 

'Android 앱 개발' 카테고리의 다른 글

Android - 액티비티 생명 주기  (0) 2024.06.20
Android - 액티비티(Activity)  (0) 2024.06.20
Android - Layout  (0) 2024.06.19
Android UI - View & Widget  (0) 2024.06.19
Android 앱 개발 입문 - Android Studio  (0) 2024.06.18