Activity & intent
intent 란?
- 하나의 액티비티가 다른 액티비티를 실행시킬 수 있는 메시지 시스템
-인텐트는 실행하는 방법에 따라 ' 명시적 인텐트와'와 '묵시적 인텐트'로 구분
묵시적 intent 실습
★권한 부여하기★
<!-- Intent 기능에 필요한 권한 승인받기! -->
<uses-permission android:name="android.permission.CALL_PHONE" />
if(ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
// 권한 요청하기
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},0);
}
package com.example.ex_0712;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button btn_web, btn_camera, btn_dial, btn_call;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_web = findViewById(R.id.btn_web);
btn_camera = findViewById(R.id.btn_camera);
btn_dial = findViewById(R.id.btn_dial);
btn_call = findViewById(R.id.btn_call);
btn_web.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//웹으로 이동하기 위한 주소 지정!
Uri uri = Uri.parse("https://www.naver.com");
//Intent 객체 생성!
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
//
startActivity(intent);
}
});
btn_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
});
btn_dial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("tel:010-1234-5678");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
}
});
btn_call.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// call 기능은 권한을 가지고 있어야만 Intent를 통해 사용할 수 있다!
// 관련된 권한은 어플자체에 지정을 해야하므로 AndroidManifest파일에 권한 지정하기
Uri uri = Uri.parse("tel:010-1234-5678");
Intent intent = new Intent(Intent.ACTION_CALL,uri);
// call에 대한 권한을 받은적이 있는지 없는지 판단하에
// 받은적이 없다면 직접 권한 받아오기!
if(ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
// 권한 요청하기
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.CALL_PHONE},0);
}
startActivity(intent);
}
});
}
}
명시적 intent 실습
package com.example.ex_0712;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity2 extends AppCompatActivity {
Button btn_next,btn_next2;
EditText edt_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn_next = findViewById(R.id.btn_next);
edt_data = findViewById(R.id.edt_data);
//양방향을 위한 View
btn_next2 = findViewById(R.id.btn_next2);
//btn_next 클릭시 NextActivity로 이동하기!
btn_next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 입력된 데이터 가져오기!
String data = edt_data.getText().toString();
// 단방향의 Intent 생성하기
// Intent(현재 Activity의 정보, 넘어갈 Activity 정보)
Intent intent = new Intent(MainActivity2.this, NextActivity2.class);
// Intent에 포함할 데이터 저장하기
// 일종의 태그값에 원하는 값을 담아서 전달
intent.putExtra("data",data);
//Intent 실행명령
startActivity(intent);
// 현재 띄워져 있는 화면을 종료하는 메소드
finish();
}
});
btn_next2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// getApplicationConetxt() == MainActivity2.this 와 동일한 기능!
Intent intent = new Intent(getApplicationContext(), NextActivity2.class);
// 단방향으로 intent --> startActivity()
// 양방향으로 intent --> startActivityForResult()
startActivityForResult(intent, 0);
}
});
} // OnCreate()
//통신의 결과값에 따른 처리 메소드 생성! -> 제대로 통신이 되었을 경우!
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0){
if(resultCode == RESULT_OK){
//요청된 코드와 요청의 결과가 OK 라면! -> 통신이 잘 됐다!
Toast.makeText(getApplicationContext(), "양방향 성공!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(), "양방향 실패...!", Toast.LENGTH_SHORT).show();
}
}
}
}
package com.example.ex_0712;
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;
public class NextActivity2 extends AppCompatActivity {
TextView txt_data;
Button btn_main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next2);
txt_data = findViewById(R.id.txt_data);
btn_main = findViewById(R.id.btn_main);
// // 저장되어 넘어온 Intent에 접근하기!
// Intent intent2= getIntent();
// String data = intent2.getStringExtra("data");
//
// //한줄로 intent 내용 가져오는 방법!
//// String data = getIntent().getStringExtra("data");
//
// txt_data.setText(data);
btn_main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//양방향의 intent를 사용할때 결과에 대하여
//돌려보내 줄 수 있는 메소드 -> 매개변수로 통신에 대한 신호값을 보내준다
setResult(RESULT_OK);
finish();
}
});
}
}