티스토리 뷰

명시적 인텐트(Explicit Intent)

특정 컴포넌트(액티비티, 서비스, 브로드캐스트 리시버 등)를 명확히 지정하여 실행할 때 사용하는 인텐트


매니페스트 파일 설정

AndroidManifest.xml

  • 사용할 액티비티 정보 등록을 위해 아래 태그 추가
<activity android:name=".MainActivity" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

다중 화면 처리

MainActivity.java

package com.example.test;

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle("메인 화면");

        LinearLayout l = new LinearLayout(this);
        l.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        l.setPadding(50,50,50,50);
        l.setOrientation(LinearLayout.VERTICAL);
        l.setGravity(Gravity.CENTER);

        ViewGroup.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        Button b1 = new Button(this);
        b1.setLayoutParams(p);
        b1.setText("다음으로");
        b1.setOnClickListener(v -> {
            Intent i = new Intent(getApplicationContext(), Activity_first.class);
            startActivity(i);
        });
        l.addView(b1);

        Button b2 = new Button(this);
        b2.setLayoutParams(p);
        b2.setText("앱나가기");
        b2.setOnClickListener(v -> {
            finish();
        });
        l.addView(b2);

        setContentView(l);
    }
}

 

 

Activity_first.java

package com.example.test;

import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.appcompat.app.AppCompatActivity;

public class Activity_first extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle("두 번째 액티비티");

        LinearLayout l = new LinearLayout(this);
        l.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        l.setPadding(50,50,50,50);
        l.setOrientation(LinearLayout.VERTICAL);
        l.setGravity(Gravity.CENTER);

        ViewGroup.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        Button b = new Button(this);
        b.setLayoutParams(p);
        b.setText("돌아가기");
        b.setOnClickListener(v -> {
            finish();
        });
        l.addView(b);

        setContentView(l);
    }
}

실행 화면


퀴즈 앱: 액티비티 간 정보 전달

MainActivity.java

  • startActivityForResult():결과 수신을 기대하면서 새로운 액티비티를 실행시킬 때 사용
  • startActivityForResult로 실행시킨 액티비티 종료 시 onActivityResult 메소드로 호출됨
  • onActivityResult 메소드 내에 결과 수신 코드 작성
  • 다른 액티비티로의 정보 전달 필요 시 전달할 정보를 key, value의 쌍으로 인텐트에 부착하여 전달
  • requestCode: 액티비티를 구분하기 위해 사용하는 고유 식별 번호, 어떤 액티비티에서 반환된 결과인지 구분하기 위해 사용
  • resultCode: 호출된 액티비티에서 작업의 성공 또는 실패를 나타내는 값, 호출한 액티비티로 반환
  • RESULT_OK: 일반적으로 작업이 성공했음을 나타내는 상수 값
  • putExtra(): 인텐트에 정보 부착 시 사용
  • getStringExtra(): 인텐트로부터 String형 정보 수신 시 사용
package com.example.test;

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    int cnt = 0;
    TextView r;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle("메인 화면");

        LinearLayout l = new LinearLayout(this);
        l.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        l.setPadding(50,50,50,50);
        l.setOrientation(LinearLayout.VERTICAL);
        l.setGravity(Gravity.CENTER);

        ViewGroup.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        TextView t = new TextView(this);
        t.setLayoutParams(p);
        t.setText("Q. 우리나라의 수도는?");    t.setTextSize(25);
        l.addView(t);

        Button b = new Button(this);
        b.setLayoutParams(p);
        b.setText("입력하기");  b.setTextSize(25);
        b.setOnClickListener(v -> {
            Intent i = new Intent(getApplicationContext(), Activity_first.class);
            i.putExtra("CNT", ++cnt);
            startActivityForResult(i,1);
        });
        l.addView(b);

        r = new TextView(this);
        r.setLayoutParams(p);
        r.setGravity(Gravity.CENTER);
        r.setText("답을 입력해주세요!");    r.setTextSize(20);
        l.addView(r);

        setContentView(l);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1 && resultCode==RESULT_OK) {
            String a = data.getStringExtra("ANSWER");

            if(a.equals("서울") || a.equals("Seoul") || a.equals("seoul")) r.setText("정답입니다!\n제출한 답: "+a);
            else r.setText("틀렸습니다!\n제출한 답: "+a);
        }
    }
}

 

Activity_first.java

  • setResult(): 호출된 액티비티가 호출한 액티비티로 데이터를 반환할 때 사용하는 메서드
  • getIntExtra: 인텐트로부터 Int형 정보 수신 시 사용
package com.example.test;

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;

public class Activity_first extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle("두 번째 액티비티");

        LinearLayout l = new LinearLayout(this);
        l.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        l.setPadding(50,50,50,50);
        l.setOrientation(LinearLayout.VERTICAL);
        l.setGravity(Gravity.CENTER);

        ViewGroup.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        Intent ig = getIntent();

        EditText e = new EditText(this);    e.setTextSize(20);
        e.setHint("입력 시도 "+ig.getIntExtra("CNT", 0)+"번째");
        l.addView(e);

        Button b = new Button(this);
        b.setLayoutParams(p);
        b.setText("제출하기");  b.setTextSize(25);
        b.setOnClickListener(v -> {
            Intent i = new Intent();
            i.putExtra("ANSWER", e.getText()+"");
            setResult(RESULT_OK, i);
            finish();
        });
        l.addView(b);

        setContentView(l);
    }
}

첫 시도 실행 화면
두 번째 시도 실행 화면
세 번째 시도 실행 화면(정답 화면)

공지사항
링크