웹에서 HTML로 전화걸기를 구현 시 아래와 같이 tel 태그로 구현을 한다.
<a href="tel:010-1234-5678">전화</a>
하지만 이 태그를 WebView 에서는 url로 인식해 "tel:010-1234-5678" 의 웹페이지로 이동하게 된다.
이와 같이 tel 태그를 WebViewClient 의 shouldOverrideUrlLoading 메소드에서 처리를 해주어야 한다.
<uses-permission android:name="android.permission.CALL_PHONE" />
inner class WebViewClientClass : WebViewClient() {
// 페이지 이동
override fun shouldOverrideUrlLoading(
view: WebView,
url: String
): Boolean {
if (url.startsWith("tel:")) { // tel 태그가 url로 인식해서 안먹히는 상황 분기
TedPermission.create()
.setPermissionListener(object : PermissionListener {
override fun onPermissionGranted() { // 권한이 이미 있거나 요청 허가됐을 때
val intent = Intent(Intent.ACTION_CALL, Uri.parse(url)) // 전화 바로 걸기
// Intent.ACTION_DIAL 전화거는 화면까지만 이동
startActivity(intent)
}
override fun onPermissionDenied(deniedPermissions: MutableList<String>?) { // 권한이 거부됐을 때
Toast.makeText(this, "전화걸기 권한을 승인해 주셔야 정상적인 전화걸기 서비스가 가능합니다.", Toast.LENGTH_SHORT).show())
}
})
.setDeniedMessage("전화걸기 권한을 승인해 주셔야 정상적인 전화걸기 서비스가 가능합니다.\n[설정] - [권한]에서 권한을 허용해주세요.")
.setGotoSettingButtonText("설정")
.setDeniedCloseButtonText("취소")
.setPermissions(Manifest.permission.CALL_PHONE)
.check()
} else {
view.loadUrl(url)
}
return true
}