티스토리 뷰
명시적 인텐트(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);
}
}
공지사항
링크