반응형
앱 개발에 있어 네트워크 상태를 체킹하는 것은 필수적입니다.
이번 포스트를 통해 안드로이드에서 간단하게 네트워크 상태를 체크하는 방법에 대해 알아보도록 하겠습니다.
<네트워크 상태를 나타내는 클래스 ConnectivityStatus>
class ConnectivityStatus(val context: Context) {
private val cm = (context.getSystemService(Context.CONNECTIVITY_SERVICE)) as ConnectivityManager?
fun getStatus(): Int {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 안드로이드 6이상
val nc: NetworkCapabilities? = cm?.getNetworkCapabilities(cm.activeNetwork)
nc?.let {
if(nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) return Val.NETWORK_STATE_WIFI
else if(nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) return Val.NETWORK_STATE_CELLULAR
}
} else {
val info: NetworkInfo? = cm?.activeNetworkInfo
info?.let {
if(info.type == ConnectivityManager.TYPE_WIFI) return Val.NETWORK_STATE_WIFI
else if(info.type == ConnectivityManager.TYPE_MOBILE) return Val.NETWORK_STATE_CELLULAR
}
}
return Val.NETWORK_DISCONNECTED
}
}
코드를 살펴보면 안드로이드 6이상(마시멜로)과 미만일때로 나누어지는 것을 볼 수 있습니다.
안드로이드 6이상부터 ConnectivityManager에서 NetworkInfo관련 함수들이 모두 deprecated 되었습니다.
따라서 안드로이드 6이상부터는 NetworkCapabilities로 대체하게됩니다.
저같은경우 상수를 이용해서 네트워크 상태를
1) 와이파이
Val.NETWORK_STATE_WIFI
2) 셀룰러(데이터)
Val.NETWORK_STATE_CELLULAR
3) 연결없음
Val.NETWORK_DISCONNECTED
나타냈습니다.
반응형
'Android' 카테고리의 다른 글
[안드로이드 / Kotlin] 블루투스 상태 체크 (0) | 2021.12.11 |
---|---|
[안드로이드 / Kotlin] 기기 해상도 가져오기 (0) | 2021.12.03 |
[안드로이드 / Kotlin] 앱 재시작 (0) | 2021.10.17 |
[안드로이드 / Kotlin] byte array를 hex string으로 변환 (0) | 2021.09.14 |
[안드로이드 / Kotlin] 다크모드 설정 (0) | 2021.09.07 |