본문 바로가기
프로그래밍/Android

[Android Kotlin] 네트워크 상태 체크

by Mr-후 2023. 3. 24.
반응형

오늘은 지난번 포스팅에 이어, 네트워크 상태가 정상일 때 RestAPI를 호출하도록 하기 위해 시점에 네트워크 상태를 체크하고 결과에 따라 통신을 시도하도록 한다. 

https://effectivecode.tistory.com/1678

 

[Android Kotlin] RestAPI with Retrofit2

어제, 오늘 양일간 나름 빠듯하게 안드로이드 앱 프로젝트를 진행했다. 이 앱은 하이브리드 앱이라 네이티브 영역은 정말 0.5%정도 밖에 안된다. 나머지는 모두 웹에서 VueJs로 개발되어졌다. 현업

effectivecode.tistory.com

 

먼저 네트워크 상태를 체크하려면 퍼미션을 획득해야 한다. 

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

다음은 network 페키지 하나 만들고 그 안에 NetworkManager라는 클래스를 하나 만들었다. 

class NetworkManager {
    companion object {
        fun checkNetworkState(context: Context): Boolean {
            val connectivityManager: ConnectivityManager =
                context.getSystemService(ConnectivityManager::class.java)
            val network: Network = connectivityManager.activeNetwork ?: return false
            val actNetwork: NetworkCapabilities =
                connectivityManager.getNetworkCapabilities(network) ?: return false

            return when {
                actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                else -> false
            }
        }
    }

}

when절에서 CELLULAR와 WIFI 상태를 체크해 정상일 경우 true를 그렇지 않을 경우 false를 리턴하도록 한다. 

 NetworkManager를 사용하는 곳에서는 

// 네트워크 상태 체크
var isConnected = NetworkManager.checkNetworkState(this)
if (isConnected) {
    checkVersion()
} else {
    progressBar!!.visibility = View.GONE
    showNetworkErrorDialog()
}

/**
 * 네트워크가 안될 때 알람 표시
 */
private fun showNetworkErrorDialog() {
    AlertDialog.Builder(this)
        .setTitle("알림")
        .setMessage("네트워크 상태를 확인하세요")
        .setPositiveButton("확인", object : DialogInterface.OnClickListener {
            override fun onClick(dialog: DialogInterface, which: Int) {
                finish()
            }
        })
        .setCancelable(false)
        .create()
        .show()
}

 

아주 간단하게 만들었는데, iOS의 경우 네트워크 상태가 변경되는 것을 감지하여 Notification하도록 만들어서 사용하는게 제공되고 있다. 안드로이드도 그렇게 만들어 사용하는 사람들도 있다. 

하지만 요즘은 이런 네트워크 상태에 대한 노티를 잘 요구하지 않았다. 왠만해서는 네트워크가 되니까? ㅎㅎㅎ 

여튼 상태를 능동적으로 감시하도록 만드는 것은 다음번에 요구 사항이 있을 때 추가하는 것으로 ~ 

 

반응형