728x90
Intent 란 ?
- 인텐트(Intent)는 일종의 메시지 객체이다.
- 이것을 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드 캐스트리시버)로 작업을 요청 할수 있다.
Intent의 유형
1). 명시적 인텐트(Explicit Intent)
명시적 인텐트는 특정한 컴포넌트를 직접적으로 호출할 때 사용되는 인텐트다. 이 방법으로, 개발자는 인텐트 객체에 시작하고자 하는 구성 요소의 이름을 명확하게 설정하고 startActivity() 또는 startService() 메소드를 통해 해당 컴포넌트를 실행시킨다.
- 활용 예시:
- 이 방식은 주로 앱 내부에서 다른 액티비티나 서비스를 시작할 때 사용된다. 예를 들어, 메인 액티비티에서 사용자의 입력을 받아 세부 정보를 표시하는 새로운 액티비티를 띄울 때 명시적 인텐트가 활용된다.
2). 암시적 인텐트(Implicit Intent)
암시적 인텐트는 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설정하여 startActivity() 메소드에 넘긴다. 이 때, 안드로이드 시스템은 이 인텐트를 처리할 수 있는 모든 애플리케이션을 검색하여 적합한 인텐트 필터를 가진 컴포넌트를 찾아 실행시킨다.
- 인텐트 필터:
- 인텐트 필터는 특정 인텐트에 반응하는 액티비티, 서비스 또는 브로드캐스트 리시버의 능력을 정의한다. 즉, 어떤 인텐트를 수신할 준비가 되어 있는지를 나타내는 설정이다.
- 일반적 사용법:
- 암시적 인텐트는 주로 다른 앱의 컴포넌트를 실행시키는 데 사용된다. 예를 들어, 사용자가 '지도 보기'를 요청할 때, 해당 작업을 처리할 수 있는 모든 앱 중 사용자가 선택할 수 있도록 안드로이드 시스템이 목록을 제공한다.
3). 인텐트(Intent) 객체 분석하기
인텐트는 안드로이드 앱의 구성 요소들 사이에서 실행을 위임하거나 정보를 전달하는 역할을 한다. 다음은 인텐트의 주요 구성 요소와 그에 대한 실제 사용 예 이다.
1). 컴포넌트 이름 (Component Name)
- 타겟 컴포넌트의 이름을 명시하여, 인텐트가 전달될 정확한 대상을 지정한다.
- 예: **new Intent(context, TargetActivity.class)**에서 **TargetActivity.class**가 컴포넌트 이름이다.
- 컴포넌트 이름이 없으면, 인텐트는 암시적으로 처리되고, 시스템이 적절한 대상을 찾는다.
2). 액션 (Action)
- 인텐트가 수행해야 할 일반적인 작업을 정의한다.
- 예: **Intent.ACTION_VIEW**는 사용자에게 데이터를 보여줄 때 사용된다.
- 예: **Intent.ACTION_DIAL**은 전화 다이얼을 열기 위해 사용된다.
3). 데이터 (Data)
- 작업을 수행하는 데 필요한 데이터의 URI를 지정합니다.
- 예: **Uri.parse("tel:12345")**는 전화 앱에 전화번호 데이터를 제공한다.
- 데이터는 보통 Uri 객체로 액션과 결합하여 사용된다.
4). 카테고리 (Category)
- 인텐트의 유형을 더 구체적으로 지정하여, 어떤 컴포넌트가 처리할 수 있는지 알려준다.
- 예: **Intent.CATEGORY_HOME**은 홈 화면 애플리케이션을 시작할 때 사용된다.
5). 엑스트라 (Extras)
- 복잡한 데이터를 인텐트에 전달하기 위한 키-값 쌍의 추가 정보다.
- 예: **intent.putExtra("extra_key", "value")**에서 **"extra_key"**는 전달할 데이터의 키이며, **"value"**는 실제 값 이다.
- 엑스트라를 통해 기본 타입부터 Serializable 객체까지 다양한 데이터를 전달할 수 있다.
4). 명시적인텐트로 다른 액티비티 시작하기
명시적 인텐트(Explicit Intent)는 특정한 액티비티를 시작할 때 사용되며, 안드로이드에서는 이를 통해 현재 액티비티에서 다른 액티비티로 전환할 수 있다.
// 현재 액티비티에서 AnotherActivity를 시작하기 위한 명시적 인텐트 생성
val intent = Intent(this, AnotherActivity::class.java)
// 인텐트에 데이터 추가 (옵션)
intent.putExtra("key", "value")
// AnotherActivity 시작
startActivity(intent)
- 인텐트 생성: Intent 클래스의 인스턴스를 생성한다. 첫 번째 매개변수로는 현재 컨텍스트(this)를, 두 번째 매개변수로는 시작하고자 하는 액티비티의 Class 객체를 전달한다. 위 예제에서 **AnotherActivity::class.java**는 시작하고자 하는 대상 액티비티를 나타낸다.
- 데이터 전달 (선택 사항): putExtra 메소드를 사용하여 인텐트에 추가 데이터를 삽입할 수 있다. 이는 키-값 쌍으로 이루어져 있으며, 시작될 액티비티에서 이 데이터를 사용할 수 있다.
- 액티비티 시작: startActivity 메소드를 호출하여 인텐트를 사용한다. 이 호출이 실행되면 안드로이드 시스템은 명시된 인텐트에 따라 **AnotherActivity**를 시작한다.
명시적 인텐트는 주로 앱 내부의 액티비티 전환에 사용되며, 암시적 인텐트와 달리 시스템이 액티비티를 추론할 필요 없이 개발자가 직접 지정한다.