인텐트는 앱 컴포넌트가 무엇을 할 것인지를 담는 메시지 객체이다. 메시지는 의사소통을 하기 위해 보내고 받는 것, 메시지를 사용하는 가장 큰 목적은 다른 액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더 등을 실행하는 것. 인텐트는 그들 사이에 데이터를 주고 받기 위한 용도로도 쓰인다.
안드로이드의 애플리케이션 구성은 4대 컴포넌트로 이루어져 있다.
이 각각의 컴포넌트간의 통신을 맡고 있는 것이 Intent(인텐트)이다.
Intent 의 통신 방법은 두가지(명시적, 암시적) 방법이 있다.
명시적 인텐트
명시적 인텐트는 가장 많이 볼 수 있는 방법입니다. 바로 앱의 화면전환를 하는 방법입니다.
하나의 액티비티에서 다른 액티비티로의 화면 전환시 사용하는 것
Intent intent = new Intent(A_Activity.this, B_Activity.class);
startActivity(intent);
현재 액티비티(A_Activity) 에서 다른 액티비티(B_Activity)를 호출할 때 사용한다.
B_Activity.class 생성시 AndroidManifest.xml에도 액티비티를 사용하겠다고 정의해줘야 한다.
인텐트는 액티비티 호출시 데이터를 전달 또는 데이터를 리턴 받을 수 있습니다
A_Activity에서 B_Activity에 데이터 전달시
// A_Activity - 데이터를 보낸다.
Intent intent = new Intent(A_Activity.this, B_Activity.class);
// 데이터 전달
intent.putExtra("key", "데이터가 전달 되었습니다.");
startActivity(intent);
//------------------------------------------------------------------------
// B_Activity - 데이터를 받는다.
Intent getIntent = getIntent();
String value = getIntent.getStringExtra("key");
A_Activity에서 B_Activity에 데이터 전달하고 B_Activity 종료시 리턴값을 받을 때
// A_Activity - startActivityForResult() 메소드로 B_Activity를 호출하고
// onActivityResult()로 리턴값을 받습니다.
Intent intent = new Intent(A_Activity.this, B_Activity.class);
startActivityForResult(intent, 100);
//------------------------------------------------------------------------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 100:
if(data.getExtras() != null){
String str = data.getStringExtra("resultKey");
result01.setText("startAcitivtyForResult() 리턴값 받기: " + str);
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
암시적 인텐트
암시적 인텐트는 Intent의 Action에 따라 해당하는 적합한 애플리케이션의 클래스를 호출한다. 이 때 단 하나가 아닌 여러개가 호출 될 수도 있습니다.
암시적 인텐트는 웹브라우저 호출, 이메일 전송, 전화앱으로의 통화 등이 해당
//웹브라우저 인텐트 호출
Intent intent = new Intent(A_Activity.this, B_Activity.class);
// 데이터 전달
intent.putExtra("key", "데이터가 전달 되었습니다.");
startActivity(intent);
//------------------------------------------------------------------------
//이메일 전달 인텐트 호출
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_EMAIL, "sampleXXX@sampleXXX.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "전달할 이메일 제목");
intent.putExtra(Intent.EXTRA_TEXT, "전달할 내용");
startActivity(Intent.createChooser(intent, "Choose Email"));
//------------------------------------------------------------------------
전화걸기 인텐트 호출
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("tel:010-0000-0000"));
startActivity(intent);