◼️ 인텐트 : 4대 컴포넌트끼리 유기적으로 정보전달을 가능하게 해주는 역할
안드로이드 어플리케이션을 구성하는 네 가지
Activity, Service, Broadcast Receiver, Content Provider가 있다.
이것을 4대 컴포넌트라고 불린다.
이때 인텐트(Intent)란 이러한 어플리케이션 구성요소(컴포넌트) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.
Ex) A,B 액티비티가 있다고 가정하면 A >> B , B >> A 로의 데이터 전달 및 화면 전환을 할 수 있다.
◼️ 인텐트의 종류
- 명시적 인텐트 : 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우에 사용
➡️ 사용하는 이유로는 특정 컴포넌트나 액티비티가 명확하게 실행되어야 할 경우에 사용된다. - 암시적 인텐트 : 인텐트의 액션과 데이터를 지정하긴 했지만, 호출할 대상이 달라질 수 있는 경우에 사용된다. 즉, 설치된 애플리케이션들에 대한 정보를 알고 있는 안드로이드 시스템이 인텐트를 이용해 요청한 정보를 처리 할 수 있는 적절한 컴포넌트를 찾아본 다음 사용자에게 그 대상과 처리 결과를 보여주는 과정을 거치게 된다.
➡️ 사용하는 이유로는 기존에 어떤 기능들을 지원하는 앱들이 있는 경우에 암시적 인텐트를 사용해서 그 앱들을 사용하면 되는 것이다.
◼️ 사용방법(코드)
- ▪️startActivity사용▪️
새로 띄우는 액티비티로부터 받는 응답을 처리할 필요가 없을 때 간편하게 사용한다.
<정보를 보내려는 Class>
Intent intent = new Intent(getApplicationContext(),???.class); //Intent 객체 생성자로(현재 클래스의 context, 값을 받을 class)를 입력해주면 된다.
startActivity(intent); - ▪️startActivityForResult()사용▪️
새로 띄운 액티비티로 받는 응답을 처리 할 경우에 사용한다.
<정보를 보내려는 Class>
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivityForResult(intent,REQUEST_CODE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_CODE){
if(resultCode==RESULT_OK){
String key = intent.getExtras().getString("key");
Toast.makeText(getApplicationContext(),key,Toast.LENGTH_LONG).show();
}
}
}
<정보를 받고 응답을 처리하는 Class>
Intent result = new Intent();
result.putExtra("key",value);
setResult(RESULT_OK,result);