[study]Android/Android(Kotlin & Java)
webview 네트워크 체크(TRANSPORT_WIFI & TRANSPORT_CELLULAR)
yoon9i
2024. 1. 5. 15:10
// 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 를 로드하는데 시간이 오래걸리므로 시간간격을 두고 체크한다.