티스토리 뷰
네트워크 상태체크 방법이 바뀐걸 이제야 알았다. ㅠㅠ
기존에는 네트워크 상태값을 읽어서 확인했는데,
이제는 네트워크 상태 callback을 등록해서 네트워크 상태값을 callback으로 전달받는다.
Wifi와 mobile 네트워크 같이 callback을 받으니 구분이 안되서 각각 만들어줬다..
다른 방법이 있을까 테스트하며 찾아봐야겠다.
준비작업
private var isOnlineWifi = false
private var isOnlineMobile = false
private lateinit var cm: ConnectivityManager
private lateinit var networkBuilder: NetworkRequest.Builder
private val wifiCallback = @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
Log.d("테스트", "WIFI::네트워크 연결")
isOnlineWifi = true
}
override fun onLost(network: Network) {
super.onLost(network)
Log.d("테스트", "WIFI::네트워크 해제")
isOnlineWifi = false
}
}
private val mobileCallback = @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
super.onAvailable(network)
Log.d("테스트", "모바일::네트워크 연결")
isOnlineMobile = true
}
override fun onLost(network: Network) {
super.onLost(network)
Log.d("테스트", "모바일::네트워크 해제")
isOnlineMobile = false
}
}
onCreate()에서 callback 등록
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cm = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
networkBuilder = NetworkRequest.Builder()
networkBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
cm.registerNetworkCallback(networkBuilder.build(), wifiCallback)
networkBuilder = NetworkRequest.Builder()
networkBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
cm.registerNetworkCallback(networkBuilder.build(), mobileCallback)
}
onDestory()에서 callback 등록취소(unregister)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
cm.unregisterNetworkCallback(wifiCallback)
cm.unregisterNetworkCallback(mobileCallback)
}
연결상태 확인
@Suppress("DEPRECATION")
fun isNetworkAvailable(context: Context): Boolean {
(context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getNetworkCapabilities(activeNetwork)?.run {
when {
hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
else -> false
}
} ?: false
} else {
val wifi = getNetworkInfo(ConnectivityManager.TYPE_MOBILE)?.state
if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
return true
}
val mobile =
getNetworkInfo(ConnectivityManager.TYPE_MOBILE)?.state
mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING
}
}
}
제발 더이상 바뀌지 말아라... ^^
'안드로이드' 카테고리의 다른 글
ContentResolver 파일경로 가져오기 (0) | 2022.05.03 |
---|---|
안드로이드 log4j 적용 (0) | 2022.01.27 |
이미지 파일공유(여러파일) (0) | 2020.08.25 |
미디어파일 저장 (0) | 2020.08.25 |
이미지 zoom & Pinch-to-Zoom (0) | 2020.07.28 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- FileDataPart
- nodejs
- SWIFT
- 인앱 업데이트
- 웹뷰
- 이미지파일보기
- Kotlin
- 음원파일재생
- 난왜테스트가안될까
- px -> dp
- webview
- onShowCustomView
- Android
- px to dp
- #buildconofig
- 안드로이드
- 알림허용
- base64
- 작업은했는데
- 이미지파일공유
- 한글깨짐
- areNotificationsEnabled
- 새로올린테스트앱이안보이네
- Activity 크기 변경
- VolleyFileUploadRequest
- #gradle.properties
- 알림소리끄기
- height변경
- 알림소리묵음처리
- app restart
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함