Intent란?
Intent는 다른 앱 구성요소에서 작업을 요청하는 데 사용할 수 있는 메시지 객체입니다. 인텐트는 여러 가지 방법으로 구성요소 간의 통신을 촉진하지만 다음과 같은 세 가지 기본적인 사용 사례가 있습니다.
- 활동 시작활동이 완료될 때 결과를 수신하려면 startActivityForResult()를 호출합니다. 활동은 활동의 onActivityResult() 콜백에서 별도의 Intent 객체로 결과를 수신합니다. 자세한 내용은 활동 가이드를 참조하세요.
- Activity는 앱의 단일 화면을 나타냅니다. Intent를 startActivity()에 전달하여 Activity의 새 인스턴스를 시작할 수 있습니다. Intent는 시작할 활동을 설명하고 필요한 데이터를 전달합니다.
- 서비스 시작Android 5.0 (API 수준 21) 이전 버전에서는 Service 클래스의 메서드를 사용하여 서비스를 시작할 수 있습니다. Intent를 startService()에 전달하면 서비스를 시작하여 일회성 작업(예: 파일 다운로드)을 실행할 수 있습니다. Intent는 시작할 서비스를 설명하고 필요한 데이터를 전달합니다.
- 서비스가 클라이언트-서버 인터페이스로 설계된 경우 Intent를 bindService()에 전달하여 다른 구성요소에서 서비스에 결합할 수 있습니다. 자세한 내용은 서비스 가이드를 참고하세요.
- Service는 사용자 인터페이스 없이 백그라운드에서 작업을 실행하는 구성요소입니다. Android 5.0 (API 수준 21) 이상에서는 JobScheduler를 사용하여 서비스를 시작할 수 있습니다. JobScheduler에 관한 자세한 내용은 API-reference documentation를 참고하세요.
- 브로드캐스트 전송
- 브로드캐스트는 모든 앱이 수신할 수 있는 메시지입니다. 시스템은 시스템이 부팅되거나 기기가 충전을 시작할 때와 같은 시스템 이벤트에 다양한 브로드캐스트를 전송합니다. Intent를 sendBroadcast() 또는 sendOrderedBroadcast()에 전달하여 다른 앱에 브로드캐스트를 전달할 수 있습니다.
Intent 종류
명시적 인텐트
전체 ComponentName를 지정하여 어느 애플리케이션이 인텐트를 충족할지 지정합니다. 시작하려는 활동 또는 서비스의 클래스 이름을 알고 있으므로 일반적으로 명시적 인텐트를 사용하여 자체 앱에서 구성요소를 시작합니다. 예를 들어 사용자 작업에 응답하여 앱 내에서 새 활동을 시작하거나 백그라운드에서 파일을 다운로드하는 서비스를 시작할 수 있습니다.
암시적 인텐트
특정 구성요소의 이름을 지정하지 않고 대신 실행할 일반 작업을 선언합니다. 그러면 다른 앱의 구성요소가 이를 처리할 수 있습니다. 예를 들어 사용자에게 지도상의 위치를 표시하고자 하는 경우, 암시적 인텐트를 사용하여 기능을 갖춘 다른 앱이 지도에 지정된 위치를 표시하도록 요청할 수 있습니다.
그림 1. 시스템을 통해 암시적 인텐트가 전달되어 다른 활동을 시작하는 방법: [1] 활동 A는 작업 설명이 있는 Intent를 만들어 startActivity()에 전달합니다. [2] Android 시스템이 모든 앱에서 인텐트와 일치하는 인텐트 필터를 검색합니다. 일치 항목이 발견되면 [3] 시스템은 onCreate() 메서드를 호출하고 Intent에 전달하여 일치하는 활동 (활동 B)을 시작합니다.
Intent 객체의 구성 요소
- Action(액션): 수행할 액션 이름(ACTION_DIAL)
- Data(데이터): 수행할 데이터의 URI(tel:)
- Category(카테고리): 수행할 액션에 대한 추가적인 정보
- Type(타입): 수행할 인텐트 데이터의 명시적인 타입(MIME 타입)(video/mpeg)
- Component name(컴포넌트 이름): 대상 컴포넌트의 완전한 클래스 이름
- Extras(추가 정보): 인텐트를 다루는 컴포넌트에 추가적으로 전달할 한 쌍의 키/값
이 구성 요소를 활용하면 다른 애플리케이션의 액티비티를 실행하거나 데이터를 전달해줄 수 있다. 이 중에서 가장 중요한 요소는 Action이다. 액션은 액티비티와 브로드캐스트 액션으로 구분할 수 있으며 다음은 액티비티 액션 중에서 가장 자주 사용하는 것을 정리한 것이다.
Intent Filter
인텐트 필터(IntentFilter)는 특정 인텐트를 받을지 말지를 정의하는 역할을 수행하며, 이를 통해 컴포넌트의 특징이 정해진다.
예를 들어, 인텐트 필터의 에 android.intent.action.MAIN을 선언하고 에 android.intent.category.HOME을 선언하면, 해당 컴포넌트는 홈 애플리케이션이 되어 디바이스가 시작될 때 자동으로 시작될 수 있는 애플리케이션이 된다.
인텐트 필터는 AndroidManifest.xml에 다음처럼 다양하게 정의할 수 있다(다음의 예제는 안드로이드 예제로 제공되는 노트패드 애플리케이션에 포함된 것이다).
인텐트 필터를 구성하는 요소는 인텐트에 작성할 수 있는 요소들과 동일하다.
'Android > 공부' 카테고리의 다른 글
[Android] Clean Architecture + MVVM 패턴 (1) | 2023.08.06 |
---|---|
[Android] 알림 커스텀과 안드로이드 13 알림 권한 설정 (0) | 2023.07.21 |
[Android] Retrofit2 싱글톤패턴 적용하기 (0) | 2022.11.26 |
[Android] Recyclerview item Click / Click Listener 등록하는 법 (0) | 2022.11.01 |
[Android] RecyclerView란? / RecyclerView Adapter 사용법 (0) | 2022.10.26 |