Intent

똘이주인·2021년 8월 5일
0

Intent란?

인텐트는 앱 컴포넌트가 무엇을 할 것인지를 담는 메시지 객체이다. 메시지는 의사소통을 하기 위해 보내고 받는 것, 메시지를 사용하는 가장 큰 목적은 다른 액티비티, 서비스, 브로드캐스트 리시버, 컨텐트 프로바이더 등을 실행하는 것. 인텐트는 그들 사이에 데이터를 주고 받기 위한 용도로도 쓰인다.

안드로이드의 애플리케이션 구성은 4대 컴포넌트로 이루어져 있다.

  • 4대 컴포넌트
  • 액티비티(Activity)
  • 서비스(Service)
  • 브로드캐스트 리시버(Broadcast Receiver)
  • 컨텐트 프로바이더(Content Provider)

이 각각의 컴포넌트간의 통신을 맡고 있는 것이 Intent(인텐트)이다.

Intent 의 통신 방법은 두가지(명시적, 암시적) 방법이 있다.

  1. 명시적 인텐트

    명시적 인텐트는 가장 많이 볼 수 있는 방법입니다. 바로 앱의 화면전환를 하는 방법입니다.

    하나의 액티비티에서 다른 액티비티로의 화면 전환시 사용하는 것

    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);
    }
  2. 암시적 인텐트

    암시적 인텐트는 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);
    

0개의 댓글