이번 포스팅에서는 내가 개발하는 앱에서
안드로이드 시스템 기본 앱인 전화 앱을 이용하여 전화 연결하는 방법을 알아본다.
2가지 방법을 소개한다.
첫 번째는 입력 받은 전화 번호를 가지고 전화 앱으로 이동하는 방법이고,
두 번째는 입력 받은 전화 번호로 직접 전화 연결하는 방법이다.
✅ 전화 앱으로 이동
앱에서 전화를 직접 연결하지 않고, 상대방의 전화번호 데이터를 가지고 전화 앱으로 이동한다.
사용자가 직접 통화 버튼을 눌러야지만 전화를 걸 수 있다.
직접 전화를 걸지 못해서 불편한 감도 있지만,
전화하기 전에 한 번 더 체크하는 용도를 생각하면 나름 수요 있는 방법이라고 생각한다.
MainActivity.kt
button.setOnClickListener {
val phoneNumber = "tel:${bind.edittext.text}"
val intent = Intent(Intent.ACTION_DIAL, Uri.parse(phoneNumber))
startActivity(intent)
}
EditText에 전화번호를 입력 받고 버튼을 누르면 전화 앱으로 이동하는 코드다.
Intent를 사용하여 간단하게 구현할 수 있기에 어려운 점은 없다.
Intent.ACTION_DIAL 액션을 사용하고,
전화번호 문법으로는 "tel:{전화번호}" 와 같은 형식을 Uri 타입으로 작성해주면 된다.
🎈 결과
EditText에 전화번호를 입력하고 버튼을 누르면...
위 처럼 전화번호가 입력되어 있는 상태로 전화 앱이 켜진다.
✅ 앱에서 바로 전화 걸기
전화 앱으로 이동하는 과정을 거치지 않고 내 앱에서 바로 전화를 할 수도 있다.
다만 이 방법은 사용자에게 전화 권한을 요청하여 허용받아야 한다.
그렇기에 이번에도 역시 TedPermission 라이브러리 활용하여 간편하게 권한 요청을 해준다.
AndroidManifest.xml
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
먼저 매니페스트 파일에 CALL_PHONE 권한을 작성해주고,
uses-feature 태그도 작성해주어 전화 기능이 필수적이지 않다는 것을 명시해준다.
MainActivity.kt
fun checkPermission() {
TedPermission.create()
.setPermissionListener(object : PermissionListener {
override fun onPermissionGranted() {
call()
}
override fun onPermissionDenied(deniedPermissions: List<String>) {
// 권한 거부 시 동작
})
.setDeniedMessage("권한을 허용해 주셔야\n사용 가능합니다.")
.setPermissions(android.Manifest.permission.CALL_PHONE)
.check()
}
매니페스트 파일에 선언한 권한을 요청해주고,
권한 허용 시 call() 함수를 호출해주었다.
MainActivity.kt
fun call() {
val phoneNumber = "tel:${bind.edittext.text}"
val intent = Intent(Intent.ACTION_CALL, Uri.parse(phoneNumber))
startActivity(intent)
}
...
button.setOnClickListener {
checkPermission()
}
전화 앱으로 이동하는 예제와 유사하지만, Intent의 액션을 변경해줘야 한다.
ACTION_DIAL → ACTION_CALL
🎈 결과
전화번호를 입력 후, 버튼을 눌러서 전화 권한을 허용해주면..!
전화 앱을 거치지 않고 곧바로 전화 연결되는 것을 확인할 수 있다..!
역시 앱 테스트는 엄마한테
참고로, 전화 앱을 거치지 않는 것은 아니고 생략된 것 처럼 보여질 뿐이다.
통화 연결 시 당연히 전화 앱을 사용한다.
다시 한 번 느끼지만 Intent는 전지전능하다!
'Android (안드로이드)' 카테고리의 다른 글
[Android] SMS / 문자 메시지 앱 연결 / 문자 메시지 전송 (2) | 2025.01.17 |
---|---|
[Android] DrawerLayout / 서랍장 화면 (0) | 2025.01.15 |
[Android] Snackbar / 스낵바 사용해보기 (2) | 2025.01.14 |
[Android] Context / Application Context / Activity Context (6) | 2025.01.13 |
[Android] DownloadManager / HTTP 통신으로 파일 다운로드하기 (0) | 2025.01.10 |