인텐트(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
도구를 사용하여 특정 인텐트를 내보낼 수 있습니다.
- Android 기기를 개발용으로 설정하거나, 가상 기기를 사용하세요.
- 지원하고자 하는 인텐트를 처리하는 앱 버전을 설치하세요.
adb
를 사용하여 인텐트를 내보냅니다.adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \ -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
예:
adb shell am start -a android.intent.action.DIAL \ -d tel:555-5555 -n org.example.MyApp/.MyActivity
- 필요한 인텐트 필터를 정의했다면 앱이 인텐트를 처리해야 합니다.
자세한 내용은 ADB 셸 명령어를 참조하세요.
1개의 댓글
성빈 · 2023년 6월 27일 6:49 오후
깔끔한 정리 감사합니다!