Home Intent
Post
Cancel

Intent

인텐트

.android.content 패키지 안에 정의되어 있는 인텐트는 앱 구성 요소 간에 작업 수행을 위한

정보를 전달하는 역할을 한다.

다른 앱 구성 요소에 인텐트를 전달할 수 있는 대표적인 메서드는 다음과 같다.

1
2
3
4
5
startActivity() 				// 액티비티를 화면에 띄울 때 사용
startActivityForResult()		// 
startService()					// 서비스를 시작할 때 사용
bindService()					// 
broadcastIntent()				// 인텐트 객체를 브로드 캐스팅 방식으로 전송할 때 사용

인텐트의 기본 구성 요소는 액션(Action)과 데이터(Data)이다.

액션은 수행할 기능이고, 데이터는 액션이 수행될 대상의 데이터를 의미한다.

액션과 데이터를 이용해 인텐트를 만들고 필요한 액티비티를 띄워주는 대표적인 경우는 다음과 같다.

속성설명
ACTION_DIAL tel:010-9999-9999주어진 전화번호를 이용해 전화 걸기 화면을 보여줌
ACTION_VIEW tel:010-9999-9999주어진 전화번호를 이용해 전화 걸기 화면을 보여줌.
URI 값의 유형에 따라 VIEW 액션이 다른 기능을 수행함.
ACTION_EDIT content://contacts/people/2전화번호부 데이터베이스에 있는 정보 중에서
ID 값이 2인 정보를 편집하기 위한 화면을 보여줌
ACTION_VIEW content://contacts/people전화번호부 데이터베스의 내용을 보여줌

다음은 인텐트 생성자이다.

1
2
3
4
5
Intent()
Intent(Intent o)
Intent(String action [,Uri uri])
Intent(Context packageContext, Class<?> cls)
Intent(String action, Uri uri, Context packageContext, Class<?> cls)

인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우에는

‘명시적 인텐트(Explicit Intent)라고 하며, 액션과 데이터를 지정하긴 했지만 호출할 대상이

달라질 수 있는 경우에는 암시적 인텐트(Implicit Intent)라고 부른다.


암시적 인텐트는 액션과 데이터로 구성되지만 그 외에도 여러 가지 속성을 가지고 있다.

대표적인 것으로 Category, Type, Component, Extras(부가 데이터)가 있다.

범주

  • 액션이 실행되는 필요한 추가적인 정보를 제공한다.
    예를 들어 CATEGORY_LAUNCHER는 최상위 앱으로 설치된 앱들의 목록을 보여주는 애플리케이션 런처 화면에 이 앱을 보여주어야 한다는 것을 의미한다.

타입

  • 인텐트에 들어가는 데이터의 MIME 타입을 명시적으로 지정한다. 보통 MIME 타입은 데이터만으로도 구별이 가능하지만 명시적으로 지정할 경우도 있다.

컴포넌트

  • 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정한다.
  • 보통 이 정보는 인텐트의 다른 정보를 통해 결정된다.
  • 이 속성이 지정될 경우에는 지정된 컴포넌트가 실행되도록 한다.

부가데이터

  • 인텐트는 추가적인 정보를 넣을 수 있도록 번들(Bundle) 객체를 담고 있다. 이 객체를 통해 인텐트 안에 더 많은 정보를 넣어 다른 앱 구성 요소에 전달 할 수 있다.
  • 이메일을 보내는 액션이 있다면 이메일에 들어갈 제목, 내용 등을 부가 데이터로 넣어 전달해야 이메일 앱이 그 데이터를 받아 처리할 수 다.

인텐트 예시

activity_main.xml -> 최상위 레이아웃 (리니어 레이아웃) -> 입력 텍스트 창 추가 -> 버튼 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MainActivity extends AppCompatActivity {

    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     // 뷰 객체 참조

        editText = findViewById(R.id.editText);

        Button button = findViewById(R.id.button);
        button.setOnClickListener((v)->{
            String data = editText.getText().toString();    // 입력 상자에 입력된 전화번호 확인
            // 전화걸기 화면을 보여줄 인텐트 객체
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
            startActivity(intent);  // 액티비티 띄우기
        });
        
    }
}

ezgif com-gif-maker (1)

This post is licensed under CC BY 4.0 by the author.