반응형
오늘은 지난번 포스팅에 이어, 네트워크 상태가 정상일 때 RestAPI를 호출하도록 하기 위해 시점에 네트워크 상태를 체크하고 결과에 따라 통신을 시도하도록 한다.
https://effectivecode.tistory.com/1678
먼저 네트워크 상태를 체크하려면 퍼미션을 획득해야 한다.
<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하도록 만들어서 사용하는게 제공되고 있다. 안드로이드도 그렇게 만들어 사용하는 사람들도 있다.
하지만 요즘은 이런 네트워크 상태에 대한 노티를 잘 요구하지 않았다. 왠만해서는 네트워크가 되니까? ㅎㅎㅎ
여튼 상태를 능동적으로 감시하도록 만드는 것은 다음번에 요구 사항이 있을 때 추가하는 것으로 ~
반응형
'프로그래밍 > Android' 카테고리의 다른 글
Android - 빌드 파일명 변경 (0) | 2023.04.06 |
---|---|
[Android Kotlin] RestAPI with Retrofit2 (0) | 2023.03.22 |
Android W/cr_AwContentsClient: Denied starting an intent without a user gesture, URI https://www.xxx.re.kr/sso/business (0) | 2022.12.29 |
Android: Uncaught TypeError: Cannot read property 'getItem' of null (0) | 2022.12.29 |
getHashKey 함수 (0) | 2019.06.10 |