인텐트(Intent)란?

인텐트는 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버)간에 통신을 하기 위한 메시지 객체 입니다.
Intent를 사용하는 방법은 여러가지가 있지만 일반적으로 3가지입니다.

  • 액티비티의 시작: startActivity(Intent), startActivityForResult(Intent, requestCode)
  • 서비스의 시작: startService(Intent), bindService(Intent)
  • 브로드케스트 전달: sendBroadcast(Intent), sendOrderedBroadcast(Intent), sendStickyBroadcast()

인텐트 유형

  • 명시적 인텐트(Explicit Intent) : 시작할 컴포넌트 이름을 지정합니다. (예: new Intent(context, 클래스이름) 또는 Intent.setClass(context, 클래스이름) 등) 일반적으로 본인이 만든 컴포넌트를 실행할 때 씁니다.
  • 암시적 인텐트(Implicit Intent) : 특정 컴포넌트의 클래스명 없이 어떠한 작업을 수행할것인지만 선언합니다. 해당 인텐트를 처리할 수 있는 컴포넌트를 시스템이 필터링하여 수행하거나 사용자에게 선택하도록 합니다.

앱의 보안성 강화 정책으로 인해 Android 5.0부터는 암시적인텐트로 bindService()를 호출하면 Exception이 일어납니다.

인텐트를 만들어봅시다

인텐트 객체에는 어느 컴포넌트를 시작할지 판별하는 데 사용하는 정보가 담겨 있습니다. 또한 인텐트를 받은 컴포넌트가 적절한 작업을 수행하기 위해 사용할 정보도 이 안에 담겨 있습니다.

인텐트에 포함된 기본사항은 다음과 같습니다

구성요소 설명
Component Name 시작할 컴포넌트의 이름입니다. 명시적인텐트, 암시적 인텐트를 구분하는 중요한 요소입니다.
컴포넌트의 이름을 설정하는 방법으로는 setComponent(), setClass(), setClassName() 또는 인텐트 생성자가 있습니다.
Action 수행할 작업을 나타내는 문자열입니다. 일반적인 Action은 Intent내에 리터럴 상수로 정의 되어있습니다.
Data 작업을 수행할 데이터 및 해당 데이터의 MIME유형을 참조하는 Uri객체입니다. 데이터 URI만 설정하려면 setData()를 호출하고, MIME유형만 설정하려면 setType()을 호출하면됩니다. 두가지 모두 명시적으로 설정할 경우 setDataAndType() 을 사요하면 됩니다.
Category 인텐트를 처리해야 하는 컴포넌트의 종류에 대한 추가 정보를 담은 문자열입니다. 대부분의 경우 카테고리가 없어도 됩니다.
Extras 요청한 작업을 수행하기 위해 필요한 추가 정보를 담고 있는 Key:Value입니다. 
Flags 인텐트에 대한 메타데이터 같은 기능을 합니다. 액티비티를 시작하는 방법에 대해 명시할수도 있고 액티비티를 시작한 다음 어떻게 처리해야할지도 명시 할 수 있습니다.

 

일반적으로 암시적인텐트를 수행하는 방법에 대한 예제:

https://developer.android.com/guide/components/intents-common?hl=ko

ADB로 인텐트 확인하기

앱이 여러분이 지원하려는 인텐트에 응답하는지 확인하려면 adb 도구를 사용하여 특정 인텐트를 내보낼 수 있습니다.

  1. Android 기기를 개발용으로 설정하거나, 가상 기기를 사용하세요.
  2. 지원하고자 하는 인텐트를 처리하는 앱 버전을 설치하세요.
  3. adb를 사용하여 인텐트를 내보냅니다.

    예:

  4. 필요한 인텐트 필터를 정의했다면 앱이 인텐트를 처리해야 합니다.

자세한 내용은 ADB 셸 명령어를 참조하세요.

Buy me a coffeeBuy me a coffee
카테고리: AndroidTutorial

답글 남기기

이메일은 공개되지 않습니다.