버튼 클릭 이벤트 적용하기🎆

이번 글에서 적용하는 이벤트는
1. 전화걸기
2. 인터넷 페이지 열기
3. 구글 맵 열기
4. 구글 검색
5. 문자 보내기
6. 사진찍기
총 6가지를 정리하겠습니다.

  • 먼저 새 프로젝트를 하나 만들겠습니다.

저는 이 화면(activity_main.xml)에서 바로 버튼을 만들겠습니다.
혹시 문의가 생긴다면 새 프로젝트 만드는 법과 지금 화면(activity_main.xml)에서 버튼이나 기능 생성하는 글을 올리겠습니다.

간단하게 만든 버튼 6가지와 간략한 설명 입니다.
버튼과 글씨 색상은 제가 좋아하는 핑크색상으로 했습니다.

  • 현재 화면

아이디 값 + Intent

먼저 MainActivity.kt 이 곳으로 이동을 하겠습니다.

  • activity_main.xml에서 지정해준 아이디를 불러와 사용하겠습니다.

  • 위에 코드를 보시면 아이디와 똑같은 변수명을 주고 받아왔습니다.
  • 임폴트 오류를 때문에 자동완성을 추천 드립니다.(예시 Button)
  • findViewById(R.id.아이디이름) 이 코드는 아이디를 불러온다고 생각하시면 됩니다.
  • 저는 총 6개의 버튼 이벤트를 할려고 해서 6개 버튼 아이디 값을 다 받아왔습니다.

btnCall 버튼 클릭시 전화걸기

btnCall 아이디를 가진 버튼을 클릭 하면 저장된 전화번호로 바로
전화가 가능 기능을 만들겠습니다.

전화와 지도 같은 기능들을 사용하기 위해서는 먼저 권한을 줘야 합니다.

AndroidManifest.xml 이곳으로 이동해 기능을 주겠습니다.

빨간 박스안에 엔터키로 공간을 늘려주고 안에 코드를 입력하시면 됩니다.

<!-- 권한을 주는 기능  -->
    <uses-feature
    android:name="android.hardware.telephony"
    android:required="false" />
    <!--  전화  -->
    <uses-permission android:name="android.permission.CALL_PHONE"/>
     <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
   <!--  지도  -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

위의 코드는 전화, 지도 권한을 주는 코드 입니다.

  • 권한을 주는 코드 예시 입니다.
    위의 코드대로 작성을 하시면 처음 실행 시 한번의 권한요청이 가고 그 이후로는 바로 기능이 실행이 됩니다.

전화걸기

권한 설정이 끝났으니 이제는 btnCall 버튼을 누르면 전화거는 코드를 입력하겠습니다.
저는 인텐트(intent) 코드를 이용하여 전화를 걸었는데 인텐트는 다음에 따로 정리해서 올리겠습니다.

  • 사용할 코드 입니다.
 btnCall.setOnClickListener {
            // Intent에 필요한 전화번호 준비하기
            val uri = Uri.parse("tel:010-1234-5678")
            // 1. Intent 생성하기
            // + 코틀린에서는 객체를 생성할 때 new라는 키워드가 없다.
            val intent = Intent(Intent.ACTION_CALL,uri)

            if(ActivityCompat.checkSelfPermission(applicationContext, android.Manifest.permission.CALL_PHONE)  != PackageManager.PERMISSION_GRANTED){
                // 사용자에게 권한을 요청
                ActivityCompat.requestPermissions(this,
                    arrayOf(android.Manifest.permission.CALL_PHONE), 0)

                return@setOnClickListener
                // return이 없으면
                // 승인을 하고나서 다시 어플리케이션 화면으로 돌아갈 수 없다.
            }
            // 2. Intent 실행하기
            startActivity(intent)
        }

주석으로 적은 부분들은 간단하게 한번 읽으시면 됩니다.
위의 코드에서 ActivivyCompat - checkSelfPermission() : 현재 권한이 부여되어있는지 확인하는 코드 입니다.
이때 두개의 전달인자가 필요합니다.
1. 현재 페이지 정보(context)
2. 어떤 권한 인지
위의 코드대로 입력을 하고 실행을 하고 "전화걸기" 버튼을 누르면

무사히 전화가 잘 걸립니다.


웹 페이지 열기

  • 사용할 코드 입니다.

     btnWeb.setOnClickListener {
    
               val uri = Uri.parse("http://www.google.com")
               val intent = Intent(Intent.ACTION_VIEW,uri)
               startActivity(intent) 
    
           }

    먼저 코드 입니다.
    클릭 시 이동할려고 하는 url 값을 저는 Uri.parse 를 통해 uri에 넣어줬고
    인텐트(intent)를 사용하여 실행했습니다.

위의 코드대로 실행하고 "페이지 열기" 버튼을 누르면

실행성공!!
나머지 기능들도 인텐트와 아이디에 클릭 이벤트를 사용하여 이어서 적겠습니다.


구글 맵 열기

  • 사용할 코드 입니다.
  btnMap.setOnClickListener {
            // uri = 원하시는 위도와 경도를 입력하시면 됩니다. (위도와 경도 순으로 입력하셔야 합니다.)
            val uri = Uri.parse("http://www.google.com/maps?q=37.555745,127.005775")
            // intent 생성
            val intent = Intent(Intent.ACTION_VIEW,uri)
            // intent 실행
            startActivity(intent)
        }


위의 코드도 마찬가지로 인텐트를 이용했습니다.

구글 맵 성공!!


구글 검색

  • 사용할 코드 입니다.
//btnSearch : ACTION_WEB_SEARCH, 검색하고 싶은 데이터_
        btnSearch.setOnClickListener {

            val intent = Intent(Intent.ACTION_WEB_SEARCH)
            // 검색 창 실행 -> 검색 단어가 들어있는 intent 실행(단어 꺼내서 검색함)
            intent.putExtra(SearchManager.QUERY,"안드로이드")
            startActivity(intent)
        }

위의 코드대로 실행하고 "구글 검색" 버튼을 누르면

실행 성공!


문자보내기

  • 사용할 코드 입니다.
 // btnMsg : ACTION_SENDTO, 메세지 내용, 전화번호
        btnMsg.setOnClickListener {
            val intent = Intent(Intent.ACTION_SENDTO)
            // 문자메세지의 내용을 intent에 담아주자 : putExtra!!
            intent.putExtra("sms_body","초보 개발자 벨로그 입니다. 잘 부탁 드려요~💖")
            // 전화번호 설정하기
            intent.data = Uri.parse("smsto:" + Uri.encode("010-1234-5678"))
            startActivity(intent)
        }

위의 코드대로 실행하고 "문자보내기" 버튼을 누르면

실행 성공!

사진찍기

  • 사용할 코드 입니다.
  btnCam.setOnClickListener {
            // Emulator는 카메라를 가지고 있지 않아서
            // 가상 화면을 사용하자 ---> MediaStore
            val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            startActivity(intent)
        }

주석으로 적긴 했지만 사진찍기 기능의 경우는 Emulator는 카메라를 가지고 있지 않아서
가상의 화면을 사용했습니다.
위의 코드대로 실행하고 "사진찍기" 버튼을 누르면

실행 성공!


중간 부터는 코드의 반복적인 부분들이 있어서 코드와 실행결과 위주로 글을 적었습니다.
코드는 그대로 복붙 하시면 임폴트 에러가 날 수도 있습니다.
이 경우는 코드를 입력하시면서 자동완성 + 엔터키를 누르시면 자동 임폴트가 됩니다.
아직 초보 개발자에 초보 벨로그라 부족한 점이 많지만 다른 사람에게 도움이 되면 좋겠습니다.
긴 글 읽어 주셔서 감사합니다.🥰

profile
초보 개발자 입니다.

0개의 댓글