또자의 코딩교실

[스마트인재개발원]Android - intent 본문

코딩공부/Android

[스마트인재개발원]Android - intent

또자자 2021. 12. 27. 14:12

✅ Intent란?

Intent는 안드로이드 내에서 다른 액티비티를 실행하거나 데이터를 전달할 때 사용되는 시스템이다.

하나의 액티비티가 다른 액티비티를 실행 시킬 수 있는 메세지 시스템으로

액티비티끼리 액션과 데이터를 주면 결과를 주는 관계이다. 

 

 

✅ 묵시적 Intent 와 명시적 Intent의 비교

인텐트는 묵시적 인텐트 방식/ 명시적 인텐트 방식으로 나뉘게 된다.

  • 묵시적 Intent 
    • When: 인텐트의 액션과 데이터를 지정하긴 했지만, 호출할 대상이 달라질 수 있는 경우
      출처 : Limky 삽질블로그
      • Process : 안드로이드 시스템이 인텐트를 이용해 요청한 정보를 처리할 수 있는 적절한 프로그램를 찾아본 다음 사용자에게 그 대상과 처리 결과를 보여줌
      • Action 기능을 가짐
        • 안드로이드 시스템에 설치된 기본앱을 바로 실행시킬 수 있고, 수행할 기능들을 적을 수 있음
  • 명시적 Intent
    • When: 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출할 대상을 확실히 알 수 있는 경우에 사용 
    • Where : 주로 애플리케이션 내부에서 사용
    • Why : 특정 컴포넌트나 액티비티가 명확하게 실행되어야할 경우에 사용

 

 

자바로 치면 setAttribute/getAttribute , 클라이언트와 서버 같은 느낌같은데,

자세하고 명확한 차이점은 나중에 더 알아봐야겠다.

Intent를 통해 실행할 수 있는 다양한 기능들. 사생활 민감도에 따라 UserPermission이 필요한 기능도 있다.

 

퍼미션이 필요한 기능들과 승인코드

 

 

 


 

 

 

✅ Intent 실습 - 버튼을 눌렀을 때 각각의 기능을 실행하게 하는 Intent

위 사진은 실습에 사용한 Layout xml파일과 java코드들이다.

다음은 버튼을 눌렀을 때 각각에 Intent를 지정하고 활용하여 작업을 수행하게 하는 코드이다.

btnWeb.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"));
        //Uri는 접근할 수 있게 브라우저로 변경해주는 역할. java의 setAttribute 같은건가?
        startActivity(intent);
    }
});

btnCamera.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivity(intent);
    }
});

btnDial.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:01012345678"));
        //안드로이드에서 전화관련된걸 정보를 전달하는 프로토콜 키워드는 tel.
        //웹이라면 http, 다른거는 image?
        startActivity(intent);
    }
});

 

전화거는 intent 오류
오류 코드
(좌) 해결 방법코드 // (우) 정상작동하는 가상 머신

버튼 call 버튼을 누르면 전화를 걸고 받는 기능은 민감한 사생활적 정보기능이기 때문에 

AndroidManifest 파일에서 사용자의 권한부여가 반드시 필요하다.

또한 java파일에서도 이러한 권한부여 요청사항을 꼭 확인하는 코드가 필요하다.

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:01012345678"));
        //안드로이드에서 전화관련된걸 정보를 전달하는 프로토콜 키워드는 tel


        //사용자가 권한부여를 허락했는지 확인하는 method
        if(ContextCompat.checkSelfPermission(MainActivity2.this,
                Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED){

            //해당 권한을 사용자에게 요청하는 메소드
            ActivityCompat.requestPermissions(MainActivity2.this,
                    new String[]{Manifest.permission.CALL_PHONE},0);
            return;
        }

        startActivity(intent);
    }
});

 

✅ Toast란?

Toast.makeText(MainActivity.this, "무승부!", Toast.LENGTH_SHORT).show();

/*Toast : HTML의 Alert과 비슷한 기능.
메인엑티비티화면의 정보를 매개변수로 넘기고(MainActivity.this)
무승부라는 글자를("무승부!")
짧게 띄울거에요.(Toast.LENGTH_SHORT)*/

 

✅ 이벤트 처리 방식

  • xml의 OnClick속성에 메소드 연결
    • 거의 사용하지 않는다.
  • interface를 class에 구현
    • 같은 기능의 버튼이 여러 개 정의되어있는 경우 사용함. (상속만 하면 되니까)
  • interface를 익명 class로 정의하는 방법.
    • 독립적으로 버튼의 기능을 구현해야 할 때 사용함.

 

 

✅ Layout의 종류

  1. Linear Layout : 두가지 방향으로만 구성과 정렬이 가능한 Box모델을 기반한 레이아웃.
    1. vertical : 세로 방향으로 쌓는 방식으로 레이아웃을 만든다.
    2. horizontonal : 가로 방향으로 쌓는 방식으로 레이아웃을 만든다. 
  2. Relative Layout : 원하는 위치에는 둘 수 있지만 인근에 있는 View와 자동으로 연결된다.
  3. Grid Layout : 해상도가 바뀌면 다 깨져버릴수도 있음, 테이블과 비교하면 가로와 세로에 대한 병합이 가능함
  4. Table Layout : 수평으로만 병합이 가능함.
  5. Constraint Layout : 제약조건을 사용해 화면을 구성하는 Layout
    각각 X, y축에 대한 최소 하나의 제약 연결이 필요하다.

 

 

Constraint Layout으로 구성된 기본적인 배치 구성도
이미지를 누르면 스마트인재개발원 페이지로 이동합니다.

 

Comments