인텐트
.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); // 액티비티 띄우기
});
}
}