2. Intent와 Intent-filter의 역할

YeongJun Son·2023년 9월 26일
0

Android를 배우다

목록 보기
2/7

Intent와 Intent-filter의 역할

들어가며

학습목표

  1. Intent가 하는 역할을 살펴본다.
  2. Intent와 Intent-filter가 맺는 관계를 살펴본다.
  3. AndroidManifest.xml 에서, Intent-filter 부분을 살펴본다.

상황

  • 특정 버튼을 클릭하면, 다른 Activity로 화면이 넘어가고 값이 전달되는 로직을 구성해야 했다.
  • 아래의 XML 코드가 어떤 기능을 하는지 살펴보아야 했다.
<intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Intent란 무엇인가?

Intent의 기능

  • Intent는 액티비티, 서비스, Broadcast Receiver, 콘텐츠 제공자라는 앱 컴포넌트 간 작업을 요청하거나 수행하며, 데이터를 전달하는 데 쓰인다.
  • 안드로이드 개발자 문서에서는 크게 (1) 액티비티 시작 (2) 서비스 시작 (3) 브로드캐스트 전달 이라는 세 사례로 쓰임을 나눈다.

Intent의 형식

  • Intent 객체는 작업을 수행할 구성 요소 판별에 필요한 정보를 담고 있다.
  • Intent 객체는 (1) Action (2) Data (3) Category (4) Component Name (5) Extras (6) Flags 로 구성되어 있다.
    • Action은 수행하려는 작업을 나타낸다.
    • Data는 작업과 관련된 데이터로, 주로 Uri(Uniform Resource Information) 객체가 쓰인다.
    • Category는 해당 액티비티가 어떤 종류의 카테고리에 속하는 지 지정한다.
    • Extras는 Intent 내 키-값 쌍의 추가 정보를 다른 컴포넌트에 전달할 수 있게 해준다.
      • putExtra() 메서드로 키-값 쌍을 추가하거나, Bundle 객체를 Intent에 putExtra()로 삽입할 수 있다.
      • 키-값 쌍을 전달 받는 컴포넌트는 getExtra() 메서드를 이용할 수 있다.
    • Flags는 Intent 동작을 제어하는 데 사용된다.

Intent의 유형

  • 명시적 인텐트는 액티비티나 서비스의 클래스 이름을 명확하게 드러낸다.
    • 화면 전환에 쓰이는 방식은 명시적 인텐트다.
  • 암시적 인텐트는 시스템에 수행할 특정 작업을 요청하면, 시스템이 해당 작업을 처리할 수 있는 다른 구성요소를 찾아서 처리하도록 한다.

대표 예시

import android.content.Intent

// 액티비티 간 이동을 위한 명시적 Intent 생성 예제
val intent = Intent(this, TargetActivity::class.java)
startActivity(intent)

// 웹페이지 열기를 위한 암시적 Intent 생성 예제
val webPageUri = Uri.parse("http://www.example.com")
val webIntent = Intent(Intent.ACTION_VIEW, webPageUri)
startActivity(webIntent)
  • 명시적 인텐트에서 this는 현재 액티비티를 나타내고, TargetActivity는 이동할 목표 액티비티를 의미한다.
  • 암시적 인텐트에서 Intent.ACTION_VIEW는 웹페이지를 여는 액션을 의미하고, Uri.parse()는 URL을 Uri로 변환하여 인텐트에 포함시킨다.

Intent-filter란 무엇인가?

Intent-filter의 역할

  • Intent-filter는 안드로이드 매니페스트 파일 내에서 정의되어, 앱의 컴포넌트가 어떤 인텐트를 수신하고 처리할 것인지를 알려준다. 이는 곧 암시적 인텐트다.
  • 시스템은 액션, 데이터, 카테고리에 따라 인텐트를 인텐트 필터에 비교한다. 모두 통과해야만 해당 인텐트가 컴포넌트에 전달된다.
  • Intent 내의 모든 카테고리가 인텐트 필터에 선언된 카테고리에 속해야 한다. 카테고리가 없는 인텐트는 필터에 무관하게 비교를 통과한다.

XML 코드 이해

intent-filter 내 코드 살펴보기

<intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
  • ACTION_MAIN 액션은 주요 진입지점인 동시에 어떤 인텐트 데이터도 기대하지 않음을 나타낸다.
  • CATEGORY_LAUNCHER 카테고리는 해당 액티비티의 아이콘이 시스템의 앱 시작 관리자에 배치됨을 나타낸다.
  • <action>, <data>, <category>는 각각 허용된 인텐트 작업, 데이터 유형, 인텐트 카테고리를 선언한다.
profile
제가 좋아하는 것은 도가 아니라 기입니다

0개의 댓글