전화 걸게 하는 기능 만들기

AndroidManifest.xml 에 다음 코드를 추가

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
// 이건 전화 버튼 눌렀을 때, 메세지 버튼 눌렀을 때 기능 세팅하는 부분
// 권한이 허용 안 되어 있으면 if문이, 허용되어 있으면 else문을 실행한다.
binding.callPhone.setOnClickListener {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
            arrayOf(Manifest.permission.CALL_PHONE), REQUEST_PHONE_CALL)
    } else {
        startCall(phoneNumber)
    }
}

binding.messageButton.setOnClickListener {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,
            arrayOf(Manifest.permission.SEND_SMS), REQUEST_MESSAGE)
    } else {
        startMessage(phoneNumber)
    }
}
// 위의 코드에서 권한이 허용 안 되어 있으면 자동으로 여기로 넘어온다.
// onRequestPermissionsResult를 실행하고 권한 허용 여부에 따라 각각에 맞는 코드를 실행한다.
private fun startCall(phoneNumber: String?) {
        val intent = Intent(Intent.ACTION_CALL, Uri.parse("tel:$phoneNumber"))
        startActivity(intent)
    }

    private fun startMessage(phoneNumber: String?) {
        val uri = Uri.parse("smsto: $phoneNumber")
        val intent = Intent(Intent.ACTION_VIEW, uri)
        intent.putExtra("sms_body", "안녕하세요!")
        startActivity(intent)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            REQUEST_PHONE_CALL -> {
                if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    startCall(phoneNumber)
                } else {
                    Toast.makeText(this, "권한이 허용되지 않았습니다. 권한을 허용해야 전화를 걸 수 있습니다.", Toast.LENGTH_SHORT).show()
                }
            }

            REQUEST_MESSAGE -> {
                if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    startMessage(phoneNumber)
                } else {
                    Toast.makeText(this, "권한이 허용되지 않았습니다. 권한을 허용해야 메세지를 보낼 수 있습니다.", Toast.LENGTH_SHORT).show()
                }
            }
        }
    }
profile
김성진의 개발 관련 내용 정리 블로그

0개의 댓글