[Android/Kotlin] WebView 에서 HTML tel: 태그가 안먹을 때 (웹뷰에서 전화걸기)

SoyoungLee·2023년 4월 26일
0

안드로이드/코틀린

목록 보기
63/70
post-thumbnail

[Android/Kotlin] WebView 에서 HTML tel: 태그가 안먹을 때 (웹뷰에서 전화걸기)

웹에서 HTML로 전화걸기를 구현 시 아래와 같이 tel 태그로 구현을 한다.

<a href="tel:010-1234-5678">전화</a>

하지만 이 태그를 WebView 에서는 url로 인식해 "tel:010-1234-5678" 의 웹페이지로 이동하게 된다.

이와 같이 tel 태그를 WebViewClient 의 shouldOverrideUrlLoading 메소드에서 처리를 해주어야 한다.

📌 Manifest 에 전화 걸기 권한 추가

<uses-permission android:name="android.permission.CALL_PHONE" />

📌 WebViewClient 에서 특정 URL 패턴에 대해 직접 처리하도록 구현

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
}
  • 권한 체크는 TedPermission 라이브러리 를 사용해주었다.
    💙 TedPermission 라이브러리 👆🏻 관련 포스팅은 위를 클릭 !
profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글