Android - 인텐트

유의선·2023년 4월 20일
0

인텐트(Intent)는 앱 구성 요소 간에 작업 수행을 위한 정보를 전달하는 역할을 한다

startActivity() 또는 startActivityForResult()
startService() 또는 bindService()
broadcastIntent()

인텐트의 기본 구성 요소는 액션(Action)과 데이터(Data)이다.
액션은 수행할 기능, 데이터는 액션이 수행될 대상의 데이터를 의미한다.

예를 들면 주어진 전화번호를 이용해 전화걸기 화면을 보여주기 위한 Intent의 생성자는 다음과 같다.

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(tel:01012341234))

인텐트의 데이터는 그 포멧이 어떤 것인가를 시스템이 확인한 후 적적한 액티비티를 자동으로 띄워주기도 한다. 만약 http처럼 특정 포멧을 사용하면 그 포멧은 등록된 MINE 타입으로 구분한다.
예를 들어 http://로 시작하는 문자열을 데이터로 받으면 웹페이지 주소를 나타내는 URL이라 인식한다.


인텐트는 액션과 데이터로 구성되지만 그 외에도 범주(Category), 타입(Type), 컴포넌트(Component), 부가 데이터(Extra Data)등의 속성을 가진다.

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

타입(Type) : 인텐트에 들어가는 데이터의 MIME타입을 명시적으로 지정한다.

컴포넌트(Component) : 인텐트에 사용될 컴포넌트 클래스 이름을 명시적으로 지정한다.

부가 데이터(Extra Data) : 인텐트에는 추가적인 정보를 넣을 수 있도록 Bundle 객체가 존재한다. 이 객체를 통해 인텐트 안에 더 많은 정보를 넣어 다른 앱 구성 요소에 전달할 수 있다.


인텐트에 액션과 데이터를 넣어 전화걸기 앱을 실행시켜 보았다.

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = editText.getText().toString();

                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
                startActivity(intent);
            }
        });

액션으로 ACTION_VIEW를, 데이터로 EditText에 입력된 값을 넣었다.


다음으로 인텐트에 컴포넌트를 사용해 새로운 액티비티를 띄우도록 해보았다.

button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                ComponentName name = new ComponentName("org.techtown.samplecallintent", "org.techtown.samplecallintent.MenuActivity");
                intent.setComponent(name);
                startActivityForResult(intent, 101);
            }
        });

컴포넌트에 패키지 이름과 클래스 이름을 넣었으며,
인텐트 객체에 컴포넌트를 지정하였다.


0개의 댓글