@@ -2,10 +2,18 @@ package com.stevechulsdev.network
2
2
3
3
import android.content.Context
4
4
import android.net.ConnectivityManager
5
+ import android.net.Network
5
6
import android.net.NetworkCapabilities
7
+ import android.net.NetworkRequest
6
8
import android.os.Build
9
+ import android.util.Log
10
+ import androidx.annotation.RequiresApi
7
11
8
12
object ScNetwork {
13
+ private val TAG : String = javaClass.simpleName
14
+
15
+ private var mConnectivityManager: ConnectivityManager ? = null
16
+ private var mNetworkCallback: ConnectivityManager .NetworkCallback ? = null
9
17
10
18
/* *
11
19
* 1회성 네트워크 연결 유무 확인
@@ -34,4 +42,57 @@ object ScNetwork {
34
42
}
35
43
return false
36
44
}
45
+
46
+ /* *
47
+ * 앱 실행 중에 인터넷 연결 여부를 지속적으로 확인 할 수 있습니다.
48
+ * @param context Context
49
+ * @param networkInterface 연결 유무에 따른 Interface
50
+ */
51
+ @RequiresApi(21 )
52
+ fun checkNetworkRealTime (context : Context , networkInterface : NetworkInterface ) {
53
+ mConnectivityManager = context.getSystemService(Context .CONNECTIVITY_SERVICE ) as ConnectivityManager
54
+ val builder = NetworkRequest .Builder ()
55
+
56
+ mNetworkCallback = object : ConnectivityManager .NetworkCallback () {
57
+ override fun onAvailable (network : Network ) {
58
+ super .onAvailable(network)
59
+ Log .i(TAG , " Network onAvailable" )
60
+ networkInterface.onNetworkAvailable()
61
+ }
62
+
63
+ override fun onLost (network : Network ) {
64
+ super .onLost(network)
65
+ Log .i(TAG , " Network onLost" )
66
+ networkInterface.onNetworkLost()
67
+ }
68
+ }
69
+
70
+ mConnectivityManager?.let { connectivityManager ->
71
+ mNetworkCallback?.let { networkCallback ->
72
+ connectivityManager.registerNetworkCallback(builder.build(), networkCallback)
73
+ } ? : run {
74
+ Log .e(TAG , " ConnectivityManager.NetworkCallback is null" )
75
+ }
76
+ } ? : run {
77
+ Log .e(TAG , " ConnectivityManager is null" )
78
+ }
79
+ }
80
+
81
+ @RequiresApi(21 )
82
+ fun removeCheckNetworkRealTime () {
83
+ mConnectivityManager?.let { connectivityManager ->
84
+ mNetworkCallback?.let { networkCallback ->
85
+ connectivityManager.unregisterNetworkCallback(networkCallback)
86
+ } ? : run {
87
+ Log .e(TAG , " ConnectivityManager.NetworkCallback is null" )
88
+ }
89
+ } ? : run {
90
+ Log .e(TAG , " ConnectivityManager is null" )
91
+ }
92
+ }
93
+
94
+ interface NetworkInterface {
95
+ fun onNetworkAvailable ()
96
+ fun onNetworkLost ()
97
+ }
37
98
}
0 commit comments