하나의 액티비티가 다른 액티비티를 실행시킬 수 있는 메세지 시스템
종류
표
Permission(승인)
앱이 특정 기능을 사용하는 경우 권한 승인
-intent를 이용하면 app호출시 권한 승인 필요 x
(단, 민감한 권한은 x)
▼ manifest
<!-- 전화걸기 권한설정 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
▼
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:01089085028"));
//녹음, 전화걸기, 주소록접근, 위치정보접근 등 사용자의 민감한 기능이나 데이터를
//사용해야 하는 경우는 아래와 같이 권한을 체크하고 요청하는 로직을 정의해줘야함
//액티비티에서 실행하는 경우 -> 권한체크
if(ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
//권한요청
ActivityCompat.requestPermissions(
MainActivity2.this,
new String[]{Manifest.permission.CALL_PHONE},
0);
return;
}
startActivity(intent);
}
Intent 를 이용해 버튼마다 기능을 만들자!
①
②
③
④
버튼을 누르면 화면이 이동하게 만들자!
package org.techtown.practice1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText gotext;
Button firstbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gotext = findViewById(R.id.gotext);
firstbtn = findViewById(R.id.firstbtn);
firstbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String data = gotext.getText().toString();
//intent(현재 액티비티명.this,화면전환액비티미명.class)
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
//intent객체에 전달할 데이터 저장
intent.putExtra("data",data);
//intent객체를 실행시키는 메소드
startActivity(intent);
}
});
}
}
<풀이>
① 버튼을 클릭하면 textview에서 내용 받아와 data에 넣는다 id.getText().toString()
② intent 약간 이동 경로지정 느낌인가?
③ intent 객체에 전달할 데이터 넣어두기? putExtra("이름",데이터값)
④startActivity(intent) //실행
package org.techtown.practice1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
public class MainActivity2 extends AppCompatActivity {
TextView gettext;
Button secondbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
gettext= findViewById(R.id.gettext);
secondbtn = findViewById(R.id.secondbtn);
//객체 받아오기?
Intent intent = getIntent();
gettext.setText(intent.getStringExtra("data"));
secondbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity2.this,MainActivity.class);
startActivity(intent);
}
});
}
}
※버튼을 누르기 전, 값을 받아와야 한다
Intent intent = getIntent();
gettext.setText(intent.getStringExtra("data"));
① 받아오는 intent 객체 생성
② 앞에 mainactivity에서 data에 값을 넣어뒀으니 받아와서 gettext에 setText()한다
로그인 성공하고 여부에따라 성공,실패 출력
1-1) kakaologin창 만들고 EditView안에 이메일,비번 입력받기 ( 값 저장)
1-2) 로그인 버튼 클릭시 값 전달
2) 전달 받은 값 성공시, 로그인 성공페이지 아니면 실패 페이지? >이메일 + 로그인 성공!
package org.techtown.practice1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class kakaologin extends AppCompatActivity {
EditText edtemail,edtpw;
Button loginbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kakaologin);
edtemail = findViewById(R.id.edtemail);
edtpw = findViewById(R.id.edtpw);
loginbtn = findViewById(R.id.loginbtn);
loginbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = edtemail.getText().toString();
String pw = edtpw.getText().toString();
Intent intent = new Intent(kakaologin.this,kakaologinresult.class);
intent.putExtra("email",email);
intent.putExtra("pw",pw);
startActivity(intent);
}
});
}
}
<풀이>
① email,pw의 변수를 만들어 editview 안에 작성된 내용이 gettext되게 한다
※문자열로 바꾼다(toString)
String email = edtemail.getText().toString();
String pw = edtpw.getText().toString();
② Intent 객체를 생성하고 어디서 어디로 이동할지 알려준다 > 명시적 intent
Intent intent = new Intent(kakaologin.this,kakaologinresult.class);
③ intent 객체에 emailpw라는 이름으로 각각 putExtra 시켜준다 ( 저장개념?)
intent.putExtra("email",email);
intent.putExtra("pw",pw);
④ intent 시작
startActivity(intent);
package org.techtown.practice1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class kakaologinresult extends AppCompatActivity {
TextView resulttext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kakaologinresult);
resulttext = findViewById(R.id.resulttext);
Intent intent = getIntent();
String email = intent.getStringExtra("email");
String pw = intent.getStringExtra("pw");
if(email.equals("smhrd") && pw.equals("1234")){
resulttext.setText("로그인 성공");
}else{
resulttext.setText("로그인 실패");
}
}
}
<풀이>
① intent 객체 받아오기
Intent intent = getIntent();
② 받아온걸 email,pw라는 문자열변수에 저장
String email = intent.getStringExtra("email");
String pw = intent.getStringExtra("pw");
③ 로그인 결과 if,else문
if(email.equals("smhrd") && pw.equals("1234")){
resulttext.setText("로그인 성공");
}else{
resulttext.setText("로그인 실패");
}