<인텐트>
인텐트는 앱 구성 요소 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.
인텐트의 기본 구성 요소는 액션(Action)과 데이터(Data)이다.
액션과 데이터를 사용하는 대표적인 예
ACTION_DIAL : 주어진 전화번호를 이용해 전화걸기 화면을 보여줌
ACTION_VIEW : URL 유형에 따라 VIEW 액션이 다른 기능을 수행함. (전화걸기 화면 등)
ACTION_EDIT ~~/x : 전화번호부 DB 정보 중 ID가 x인 정보를 편집하기 위한 화면을 보여줌
ACTION_VIEW : 전화번호부 DB의 내용을 보여줌
인텐트 클래스에 정의된 액션은 많이 있는데, 그 중 ACTION_MAIN이랑 ACTION_EDIT을 가장 많이 사용한다고 함.
인텐트에 포함된 데이터의 포맷에 따라 적절한 액티비티를 자동으로 띄워주기도 한다.
ex) http처럼 특정 포맷을 사용하면 그 포맷은 등록된 MIME 타입으로 구분한다. (http로 시작 -> 웹페이지 주소로 인식)
인텐트 객체는 액션과 데이터뿐만 아니라 다른 인텐트나 클래스 객체를 인수로 하여 만들기도 한다.
- 명시적 인텐트(Explicit Intent) : 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우
- 암시적 인텐트(Implicit Intent) : 호출할 대상이 달라질 수 있는 경우 (MIME 타입에 따라 적절한 액티비티 찾아서 띄움)
<암시적 인텐트의 속성>
- 액션(Action)
- 데이터(Data)
- 범주(Category) : 액션이 실행되는 데 필요한 추가적인 정보 제공. ex) CATEGORY_LAUNCHER : 런처 화면에 이 앱을 보여줘야한다는 것을 의미.
- 타입(Type) : 데이터의 MIME 타입을 명시적으로 지정.
- 컴포넌트(Component) : 컴포넌트 클래스 이름을 명시적으로 지정.
- 부가 데이터(Extra Data) : 번들(Bundle) 객체를 통해 인텐트 안에 더 많은 정보를 넣어 다른 앱 구성 요소에 전달할 수 있음.
<인텐트에 액션과 데이터를 넣어 다른 앱의 액티비티 띄우기>
1. activity_main.xml 레이아웃을 적당히 만들어준다.
2. MainActivity 코드를 작성한다.
<MainActivity.java>
package com.example.chapter4_3;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = findViewById(R.id.editTextText);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String data = "tel:"+editText.getText().toString();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
startActivity(intent);
}
});
}
}
onClick 안의 코드를 보면
String data = "tel:"+editText.getText().toString();
먼저 읽어들인 전화번호에 "tel:"을 붙여서 전화번호임을 인지할 수 있는 문자열로 만들어준다.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
인텐트를 만들어준다. Uri.pasre에 위에 만들어낸 문자열을 집어넣고 ACTION_VIEW를 사용하여 전화걸기 화면이 뜰 수 있게 만들어준다.
startActivity(intent);
마지막으로 액티비티를 띄우는 코드.
<실행화면>
xxx-xxxx-xxxx의 형태로 입력하면 전화걸기 창으로 넘어간다.
<컴포넌트 이름을 이용해 새로운 액티비티 띄우기>
(실행화면 없음)
1. activity_main.xml에 버튼을 추가한다.
2. 새 액티비티를 만든다.(MenuActivity)
(기억 안나면 https://sand-to-desert.tistory.com/73 - 새로운 액티비티 추가하기 참고.)
3. MainActivity에 추가 코드 입력
<MainActivity.java>
package com.example.chapter4_3;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 생략
Button button2 = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
ComponentName name = new ComponentName("org.techtown.samplecallintent",
"org.techtown.samplecallintent.MenuActivity");
intent.setComponent(name);
startActivityForResult(intent,101);
}
});
}
}
onClick 안의 코드를 보면
Intent intent = new Intent();
ComponentName name = new ComponentName("org.techtown.samplecallintent",
"org.techtown.samplecallintent.MenuActivity");
컴포넌트 이름에는 두개의 파라미터가 있다. 각각 패키지 이름과 클래스 이름이 된다.
intent.setComponent(name);
startActivityForResult(intent,101);
인텐트 객체에 컴포넌트를 지정해준 다음, startActivityForResult 메서드로 액티비티를 띄운다.
이 후 실행시킨 뒤 버튼을 누르면 빈 화면(activity_menu)이 나타날 줄 알았는데 아무런 반응도 일어나지 않았다. 책에서도 실행 후의 변화가 어떠한지 적혀있지 않다.. 예제가 좀 미흡한 것 같다.
아무튼 이렇게 다른 화면을 띄울 수 있다고 한다.
'TIL > 안드로이드 스튜디오' 카테고리의 다른 글
4장 태스크 관리, 생명주기 (0) | 2024.12.07 |
---|---|
4장 플래그와 부가 데이터 (0) | 2024.12.05 |
4장 화면전환 (0) | 2024.12.01 |
도전!6 - 시크바와 프로그레스바 보여주기 (0) | 2024.11.29 |
도전!5 - 두 종류의 버튼 모양 만들기 (0) | 2024.11.29 |