05.10 안드로이드 인텐트

최고고·2022년 5월 10일
0

안드로이드 핵심


  • 화면-액티비티, 꺼지거나 종료해도 안드로이드 내부적으로 활동-서비스, 푸시알림 등 - 브로드캐스트,

생명주기

인텐트


인텐트 필터 활용하기

  • 웹 버튼 클릭 : Intent.ACTION_VIEW
    uri 지정 Uri.parse("주소")
    Intent 객체 생성 후
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
  • 카메라버튼 :MediaStore.ACTION_IMAGE_CAPTURE
    Intent 객체 생성 시

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);

  • 다이얼버튼 : Intent.ACTION_DIAL
    uri 지정 Uri uri = Uri.parse("tel:01036504155");
    Intent intent = new Intent(Intent.ACTION_DIAL,uri);
    startActivity(intent);
  • call 버튼 : Intent.ACTION_CALL
    uri 지정 (tel : - - )
    Intent intent = new Intent(Intent.ACTION_CALL,uri);
    call같은 경우는 권한체크필요함
    스스로 권한체크
if(ActivityCompat.checkSelfPermission(getApplicationContext(),
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},0);
                return;

            }

startActivity(intent);

package com.example.ex220510;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

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 implements View.OnClickListener {
    private 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(this);
        btn_camera.setOnClickListener(this);
        btn_dial.setOnClickListener(this);
        btn_call.setOnClickListener(this);


    }

    @Override
    public void onClick(View view) {
        if(view.getId()==R.id.btn_web){
            Uri uri = Uri.parse("https://www.naver.com");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        } else if (view.getId() == R.id.btn_camera){
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivity(intent);
        } else if (view.getId() == R.id.btn_dial){
            Uri uri = Uri.parse("tel:000000000");
            Intent intent = new Intent(Intent.ACTION_DIAL,uri);
            startActivity(intent);

        } else if (view.getId() == R.id.btn_call){
            Uri uri = Uri.parse("tel:010-0000-0000");
            Intent intent = new Intent(Intent.ACTION_CALL,uri);
            //스스로 권한체크,  제대로 권한설정이 제대로안됐을때
            if(ActivityCompat.checkSelfPermission(getApplicationContext(),
                    Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},0);
                return;

            }
            startActivity(intent);

        }

    }
}

값을 다른화면에 보내기

  • activity_a.xml
  • ActivityA.java 클릭이벤트 :
    EditText 값을 변수에 담아주고
    Intent 생성
    getApplicationContext(), ActivityB.class
    현재 어플리케이션정보, 이동시킬 클래스명
    데이터 담아줌 : intent.putExtra("value", value); =>값을 담을 때 키,밸류 형식
    startActivity(intent);
    finish();
package com.example.ex220510;

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 ActivityA extends AppCompatActivity {
    private Button btn_moveB;
    private EditText edit_input;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);
        btn_moveB = findViewById(R.id.btn_moveB);
        edit_input = findViewById(R.id.edit_input);

        btn_moveB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String value = edit_input.getText().toString();

                Intent intent = new Intent(getApplicationContext(), ActivityB.class);
                //현재 어플리케이션 정보, 이동시킬 클래스명
                //Intent intent = new Intent(ActivityA.this);

                intent.putExtra("value", value); //값을 담을 때, 키 밸류 형식으로

                startActivity(intent);
                finish();
                //현재 액티비티 종료 - 뒤로가기시 전페이지 안나옴


            }
        });
    }
}
  • activity_b.xml
  • ActivityB.java onCreate 실행시 화면 설계 :
    인텐트안에 네임 값을 가져옴 new 없이
    지정한 네임값인 "value"
    Intent intent = getIntent();
    String value = intent.getStringExtra("value");
    tv_result.setText(value);
package com.example.ex220510;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class ActivityB extends AppCompatActivity {
    private TextView tv_result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        tv_result = findViewById(R.id.tv_result);

        // 인텐트안에 네임 값을 가져옴
        Intent intent = getIntent();
        String value = intent.getStringExtra("value");
        tv_result.setText(value);
    }
}

0개의 댓글