본문 바로가기
Programming/Android(Kotlin & Java)

webview 네트워크 체크(TRANSPORT_WIFI & TRANSPORT_CELLULAR)

by yoon9i 2024. 1. 5.
// network check
private fun isNetworkAvailable(context: Context): Boolean {
    val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val network = connectivityManager.activeNetwork
    val capabilities = connectivityManager.getNetworkCapabilities(network)
    return capabilities != null &&
            (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
                    capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR))
}

private fun scheduleNetworkCheck() {
    lifecycleScope.launch(Dispatchers.Main) {
        delay(checkNetworkInterval)
        if (isNetworkAvailable(applicationContext)) {
            // 네트워크 연결이 복구된 경우 웹뷰 다시 로드
            binding.gogumaWebview.webViewClient = GogumaWebViewClient()
            binding.gogumaWebview.loadUrl(gogumaurl)
            showToast("네트워크가 정상적으로 연결되었습니다.")
        } else {
            // 네트워크가 아직 연결되어 있지 않은 경우 재확인 예약
            scheduleNetworkCheck()
        }
    }
}

 

위 코드를 통해 네트워크가 정상적으로 연결됬으면 webview 를 다시 로드한다.

 

class MainActivity : AppCompatActivity() {

	...

    private val checkNetworkInterval = 15000L
    private var networkCheckHandler = Handler(Looper.getMainLooper())

	...

    @SuppressLint("SetJavaScriptEnabled")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
		...

        // 네트워크 상태 확인
        if (isNetworkAvailable(this)) {
            binding.gogumaWebview.webViewClient = GogumaWebViewClient() // 웹뷰 설정
            binding.gogumaWebview.loadUrl(gogumaurl)
        } else {
            // 네트워크가 연결되어 있지 않을 때 사용자에게 메시지 표시
            showToast(getString(R.string.network_unavailable_message))
            scheduleNetworkCheck() // 네트워크 연결상태 체크
        }

		...
    }

 

자주 네트워크검사를 하게되면 webview 를 로드하는데 시간이 오래걸리므로 시간간격을 두고 체크한다.