// 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 를 로드하는데 시간이 오래걸리므로 시간간격을 두고 체크한다.
'[study]Android > Android(Kotlin & Java)' 카테고리의 다른 글
ViewBinding - kotlin (0) | 2024.01.05 |
---|---|
android backstack - kotlin (0) | 2024.01.05 |
Webview: 카카오톡 친구페이지로 이동하기 - kotlin (0) | 2024.01.05 |
디버그 서명 인증서 (SHA-1) (0) | 2023.12.05 |
해시키 구하기(Hash key) - Java (0) | 2023.12.05 |